Windows 批处理文件根据文件名中的第一个单词将文件移动到子文件夹?

Windows 批处理文件根据文件名中的第一个单词将文件移动到子文件夹?

我对批处理文件有点菜鸟,所以非常感谢您的帮助。我在一个目录中存储了大量文件,我希望根据文件名中的第一个单词将它们分类到子文件夹中。因此,我有如下文件:

C:\Folder\Wedding2018 img20929.jpg 
C:\Folder\Wedding2018 entrance.mov
C:\Folder\Wedding2018 registry of guests.pdf

C:\Folder\HorseRiding2017 spirit1.jpg
C:\Folder\HorseRiding2017 guests.txt 
C:\Folder\HorseRiding2017 certificate.pdf
C:\Folder\HorseRiding2017 jumping.mov

我希望根据第一个单词将所有文件移动到子文件夹中,最终如下所示:

C:\Folder\Wedding2018\img20929.jpg
C:\Folder\Wedding2018\entrance.mov
C:\Folder\Wedding2018\registry of guests.pdf

C:\Folder\HorseRiding2017\spirit1.jpg
C:\Folder\HorseRiding2017\guests.txt
C:\Folder\HorseRiding2017\certificate.pdf
C:\Folder\HorseRiding2017\jumping.mov

我找到了几个脚本几乎做我需要做的事,但我没有足够的能力把它带回家:

“需要一个脚本来根据文件名创建文件夹并自动移动文件”

“如何通过 Windows 批处理提取字符串的第二个单词”

我只是想不出如何集成脚本来获取第一个单词并创建一个文件将移动到的目录。

你能帮我把这个传过去吗?

答案1

  • 使用一个 for 来迭代文件夹内容%%A,其模式至少包含一个空格。
  • for /f需要将名称分成%%A两部分,一部分在第一个空格tokens=1=之前%%B,其余部分在tokens *= %%C
  • %%B如果不存在名为 的文件夹,则创建它
  • 将原始文件移动%%A%%B名为%%C

:: Q:\2018\06\11\SU_1330475.cmd
@Echo off
PushD C:\folder
for %%A in ("* *.*") do for /f "tokens=1*" %%B in ("%%A") do (
     If not exist "%%B" MD "%%B"
     Move "%%A" "%%B\%%C"
)
PopD

> tree /f
C:.
│   SU_1330475.cmd
└───folder
    ├───HorseRiding2017
    │       certificate.pdf
    │       guests.txt
    │       jumping.mov
    │       spirit1.jpg
    └───Wedding2018
            entrance.mov
            img20929.jpg
            registry of guests.pdf

答案2

它必须是一个批处理文件吗?

我会打开包含所有文件和子文件夹的主文件夹,然后转到该窗口中的搜索字段并键入 wedding* 等。按 CTRL + A 选择所有文件,然后按 CTRL + X 剪切。

创建一个名为 Wedding2018 的新文件夹,然后按 CTRL + V(粘贴)。对每个文件夹都执行此操作。

相关内容