根据部分文件名批量创建文件夹并将文件移动到文件夹
Batch create folder based on partial file name and move files to folder
我有一系列具有相似文件名的 .wav 文件。每个文件都有名字和姓氏,后跟日期和数字。我想根据名字和姓氏创建一系列文件,然后将文件移动到匹配的文件路径。
示例:
John_Doe_1-6-6-2021 15-23_123453245.wav
John_Doe_1-6-6-2021 15-23_12345874.wav
John_Doe_1-6-6-2021 15-23_1239964.wav
Mary_Walker_1-6-6-2021 15-23_123453245.wav
Mary_Walker_1-6-6-2021 15-23_1778941.wav
Mary_Walker_1-6-6-2021 15-23_8741556899.wav
我希望这些文件的组织方式类似于以下内容:
SourceDirectory
|> John_Doe_1
|> John_Doe_1-6-6-2021 15-23_123453245.wav
|> John_Doe_1-6-6-2021 15-23_12345874.wav
|> John_Doe_1-6-6-2021 15-23_1239964.wav
|> Mary_Walker_1
|> Mary_Walker_1-6-6-2021 15-23_123453245.wav
|> Mary_Walker_1-6-6-2021 15-23_1778941.wav
|> Mary_Walker_1-6-6-2021 15-23_8741556899.wav
目前我有这个脚本。该脚本将根据名字创建一个文件夹并将文件移动到那里(这很棒),唯一的问题是我需要名字、姓氏和末尾的 1。所以文件夹应该像 John Doe 1
而不仅仅是 John
或 John Doe
.
@echo off
SETLOCAL
SET "sourcedir=C:\Users\JohnUser\Desktop\Test\"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
'dir /b /a-d "* *_*-* *.*"'
) DO (
MD %%a
MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF
pause
这是一个使用 -
字符作为分隔符 Delims
来执行文件名字符串拆分的简单示例。 (您可以使用 Tokens=1
,但由于这是默认设置,我已将其省略):
@Echo Off
SetLocal EnableExtensions
Set "SourceDir=%UserProfile%\Desktop\Test"
For /F "Delims=" %%G In (
'%SystemRoot%\System32\where.exe "%SourceDir%":"?*-?*-?*-???? ??-??_?*.wav"'
) Do For /F "Delims=-" %%H In ("%%~nG") Do (
%SystemRoot%\System32\Robocopy.exe "%SourceDir%" "%SourceDir%\%%H" "%%~nxG" /Mov 1>NUL
)
要了解任何命令的工作原理,请打开命令提示符 window,键入 Command /?
。例如 for /?
, where /?
, robocopy /?
.
我有一系列具有相似文件名的 .wav 文件。每个文件都有名字和姓氏,后跟日期和数字。我想根据名字和姓氏创建一系列文件,然后将文件移动到匹配的文件路径。
示例:
John_Doe_1-6-6-2021 15-23_123453245.wav
John_Doe_1-6-6-2021 15-23_12345874.wav
John_Doe_1-6-6-2021 15-23_1239964.wav
Mary_Walker_1-6-6-2021 15-23_123453245.wav
Mary_Walker_1-6-6-2021 15-23_1778941.wav
Mary_Walker_1-6-6-2021 15-23_8741556899.wav
我希望这些文件的组织方式类似于以下内容:
SourceDirectory
|> John_Doe_1
|> John_Doe_1-6-6-2021 15-23_123453245.wav
|> John_Doe_1-6-6-2021 15-23_12345874.wav
|> John_Doe_1-6-6-2021 15-23_1239964.wav
|> Mary_Walker_1
|> Mary_Walker_1-6-6-2021 15-23_123453245.wav
|> Mary_Walker_1-6-6-2021 15-23_1778941.wav
|> Mary_Walker_1-6-6-2021 15-23_8741556899.wav
目前我有这个脚本。该脚本将根据名字创建一个文件夹并将文件移动到那里(这很棒),唯一的问题是我需要名字、姓氏和末尾的 1。所以文件夹应该像 John Doe 1
而不仅仅是 John
或 John Doe
.
@echo off
SETLOCAL
SET "sourcedir=C:\Users\JohnUser\Desktop\Test\"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
'dir /b /a-d "* *_*-* *.*"'
) DO (
MD %%a
MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF
pause
这是一个使用 -
字符作为分隔符 Delims
来执行文件名字符串拆分的简单示例。 (您可以使用 Tokens=1
,但由于这是默认设置,我已将其省略):
@Echo Off
SetLocal EnableExtensions
Set "SourceDir=%UserProfile%\Desktop\Test"
For /F "Delims=" %%G In (
'%SystemRoot%\System32\where.exe "%SourceDir%":"?*-?*-?*-???? ??-??_?*.wav"'
) Do For /F "Delims=-" %%H In ("%%~nG") Do (
%SystemRoot%\System32\Robocopy.exe "%SourceDir%" "%SourceDir%\%%H" "%%~nxG" /Mov 1>NUL
)
要了解任何命令的工作原理,请打开命令提示符 window,键入 Command /?
。例如 for /?
, where /?
, robocopy /?
.