Перемещение большого количества файлов из одного каталога в несколько каталогов.

StackOverflow https://stackoverflow.com/questions/2541887

  •  23-09-2019
  •  | 
  •  

Вопрос

Я хочу создать пакетный сценарий Windows для перемещения около 2000 файлов и разделения их так, чтобы в каждой папке было по 10 файлов.Я попытался создать пакетный скрипт, но его синтаксис просто поражает меня.Вот что у меня есть на данный момент

@echo off

:: Config parameters
set /a groupsize = 10
:: initial counter, everytime counter is 1, we create new folder
set /a n = 1
:: folder counter
set /a nf = 1

for %%f in (*.txt) do (
:: if counter is 1, create new folder
if %n% == 1 (
    md folder%nf%
    set /a n += 1
)

:: move file into folder
mv -Y %%f folder%nf%\%%f

:: reset counter if larger than group size
if %n% == %groupsize% (
    set /a n = 1
) else (
    set /a n += 1
)
)
pause

По сути, этот сценарий циклически перебирает каждый файл .txt в каталоге.Вначале он создает новый каталог и перемещает в него 10 файлов, затем снова создает новую папку и перемещает в этот каталог еще 10 файлов и так далее.Однако у меня возникли проблемы, когда n переменная не увеличивается в цикле?Я уверен, что есть и другие ошибки, поскольку окно CMD закрывается даже при pause.Любая помощь или рекомендации приветствуются, спасибо за ваше время!

Это было полезно?

Решение

Несколько вещей, которые вам нужно знать:

  • SETLOCAL ENABLEDELAYEDEXPANSION необходим, поскольку вы меняете переменные и используете их измененные значения в одном блоке в скобках. SET /? в командной строке даст некоторую информацию.Поищите в Интернете этот термин, и вы найдете лучшее объяснение.
  • Места, которые я использую !nf! формат переменных связан с отложенным расширением.
  • Как упоминал Ghostdog74, вы не увеличивали %nf%.
  • Я инициализировал nf до 0 вместо 1.Таким образом, номер папки, в которую вы хотите переместить файлы, будет таким же, как номер папки, которую вы только что создали.В своем коде вы создаете папкуX, затем увеличиваете X, а затем пытаетесь переместить файл в X+1.
  • Вы должны использовать MOVE переместить файл, MV не действует.

Этот пакетный файл работает... но обязательно проверьте!Я тестировал только небольшое количество файлов.

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

:: Config parameters
SET groupsize=10
:: initial counter, everytime counter is 1, we create new folder
SET n=1
:: folder counter
SET nf=0

FOR %%f IN (*.txt) DO (
  :: if counter is 1, create new folder
  IF !n!==1 (
    SET /A nf+=1
    MD folder!nf!
  )

  :: move file into folder
  MOVE /Y "%%f" folder!nf!

  :: reset counter if larger than group size
  IF !n!==!groupsize! (
    SET n=1
  ) ELSE (
    SET /A n+=1
  )
)

ENDLOCAL

PAUSE

Другие советы

ты не увеличиваешь %nf%.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top