Перемещение большого количества файлов в одном каталоге в несколько каталогов - PullRequest
2 голосов
/ 30 марта 2010

Я хочу создать пакетный скрипт 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. Любая помощь или руководство приветствуется, спасибо за ваше время!

Ответы [ 2 ]

8 голосов
/ 30 марта 2010

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

  • 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
0 голосов
/ 30 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...