Перемещение большого количества файлов из одного каталога в несколько каталогов.
-
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%
.