4

У меня есть несколько "файлов" (не папок) одного типа (например, « .docx ») в одном каталоге.

Кроме того, в этом же каталоге у меня есть подкаталог с именем « catalog », а внутри него - алфавитные папки (т. Е. Начинающиеся с # , A , B , C , D , E , F и т.д.),

Предполагая, что эти файлы расположены в « D:/documents/ », как [Используя Windows CMD или Windows Powershell] я бы отсортировал список файлов и переместил их в папку "catalog" в их соответствующие [с учетом регистра] ] " по алфавиту" папка, сортировки [прецедентного нечувствительной] первой букве их файла-имя?

Например: [ D:/documents/janet_henderson.docx ] переместится в [ D:/documents/catalog/J/janet_henderson.docx ]

Обратите внимание, что мне нужно, чтобы файлы с именами, начинающимися с любого номера, помещались в папку « D:/documents/catalog/#/ ».


Что у меня пока

У меня есть следующие в файле organize_files.bat

move  documents\A*.docx  documents\catalog\A\
move  documents\B*.docx  documents\catalog\B\
move  documents\C*.docx  documents\catalog\C\
move  documents\D*.docx  documents\catalog\D\
move  documents\E*.docx  documents\catalog\E\
move  documents\F*.docx  documents\catalog\F\
move  documents\G*.docx  documents\catalog\G\
move  documents\H*.docx  documents\catalog\H\
move  documents\I*.docx  documents\catalog\I\
move  documents\J*.docx  documents\catalog\J\
move  documents\K*.docx  documents\catalog\K\
move  documents\L*.docx  documents\catalog\L\
move  documents\M*.docx  documents\catalog\M\
move  documents\N*.docx  documents\catalog\N\
move  documents\O*.docx  documents\catalog\O\
move  documents\P*.docx  documents\catalog\P\
move  documents\Q*.docx  documents\catalog\Q\
move  documents\R*.docx  documents\catalog\R\
move  documents\S*.docx  documents\catalog\S\
move  documents\T*.docx  documents\catalog\T\
move  documents\U*.docx  documents\catalog\U\
move  documents\V*.docx  documents\catalog\V\
move  documents\W*.docx  documents\catalog\W\
move  documents\X*.docx  documents\catalog\X\
move  documents\Y*.docx  documents\catalog\Y\
move  documents\Z*.docx  documents\catalog\Z\
  • Есть ли лучший способ завершить эту операцию, например, поместив ее в цикл?
  • Как мне позаботиться о файлах, начинающихся с цифры?
  • Нужно ли указывать Windows CMD, чтобы он не учитывал регистр при проверке имен файлов?

1 ответ1

3

Расположение файлов в алфавитном каталоге подкаталога

Например: [ D:/documents/janet_henderson.docx ] переместится в [ D:/documents/catalog/J/janet_henderson.docx ]

Кроме того, обратите внимание: я надеюсь, что очевидно, что файлы с именами файлов, начинающимися с цифры, попадают в папку "D:/documents/catalog/#/" .

В зависимости от того, как вы объясните это и ваши примеры, ниже приведены некоторые примеры элементов командной строки для копирования и вставки, а также элементы пакетных сценариев, которые будут выполнять эти действия, как вы описываете.

Предположения

  • Все каталоги с буквами и # каталоги уже будут созданы.
  • Для первых двух приведенных ниже примеров вы НИКОГДА НЕ MOVE тот же файл с тем же именем в каталог, где файл с таким ЖЕ именем уже существует.
  • Для двух последних приведенных ниже примеров вы ВСЕГДА перезаписываете существующий файл с командой MOVE из источника в место назначения, если тот же файл с тем же именем уже существует.

Копирование командной строки (запрос, если файл уже существует)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %A IN %Letters% DO MOVE "%SourceDir%\%~A*.*" "%DestLetterDir%\%~A\"
FOR %B IN %Numbers% DO MOVE "%SourceDir%\%~B*.*" "%DestNumDir%\"
GOTO EOF

Пакетный скрипт (подскажите, если файл уже существует)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %%A IN %Letters% DO MOVE "%SourceDir%\%%~A*.*" "%DestLetterDir%\%%~A\"
FOR %%B IN %Numbers% DO MOVE "%SourceDir%\%%~B*.*" "%DestNumDir%\"
GOTO EOF

Копирование командной строки (принудительная перезапись)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %A IN %Letters% DO ECHO Y | MOVE "%SourceDir%\%~A*.*" "%DestLetterDir%\%~A\"
FOR %B IN %Numbers% DO ECHO Y | MOVE "%SourceDir%\%~B*.*" "%DestNumDir%\"
GOTO EOF

Пакетный скрипт (принудительная перезапись)

@ECHO ON

SET Letters=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
SET Numbers=(0,1,2,3,4,5,6,7,8,9)
SET SourceDir=D:\documents
SET DestLetterDir=D:\documents\catalog
SET DestNumDir=D:\documents\catalog\#

FOR %%A IN %Letters% DO ECHO Y | MOVE "%SourceDir%\%%~A*.*" "%DestLetterDir%\%%~A\"
FOR %%B IN %Numbers% DO ECHO Y | MOVE "%SourceDir%\%%~B*.*" "%DestNumDir%\"
GOTO EOF

Дальнейшее чтение и ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .