将文件移动到按字母顺序分类的子目录

将文件移动到按字母顺序分类的子目录

.docx我在同一个目录中有多种相同类型(例如“”)的“文件”(不是文件夹)。

另外,在同一个目录中,我有一个名为“ ”的子目录catalog,其中有按字母顺序排列的文件夹(即以 #ABCDE等开头F......)。

假设这些文件位于“ D:/documents/”,我该如何[使用 Windows CMD 或 Windows Powershell]对文件列表进行排序,并将它们移动到“目录”文件夹中,并放入正确的[大小写]敏感的]“按字母顺序”文件夹,按 [大小写] 排序不敏感] 文件名的首字母?

例如:[ 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

将文件排列到按字母顺序分类的子目录中

例如:[ 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

进一步阅读和资源

相关内容