根据部分文件名创建文件夹并将文件移动到创建的文件夹中
Create Folders based on part of file name and move files into the created folder
我绝对不是开发人员,我需要您的帮助。我环顾了这个站点,发现了一些我认为可以满足我的需求但实际上不起作用的例子。
First example
或另一个 Second Exapmle
我创建了这个测试批处理文件:
@ECHO OFF
SETLOCAL
SET "sourcedir=C:\Test_Directory"
PUSHD %sourcedir%
FOR /f "tokens=1* delims=-" %%a IN (
'dir /b /a-d "*.pb*"'
) DO (
ECHO MD %%a
ECHO MOVE "%%a-%%b" .\%%a\
)
POPD
GOTO :EOF
我为测试目的创建了以下文件:
- 777 这个我没有定界符.pb4
- 现在任何一个简单且不难解决的问题 - 我们开始吧。pb4
- 现在任何一个简单且不难解决的问题 - 我们开始吧。pb5
- 也可能是 (The) - Something-like-this.pb4
- 更糟 - do.pb
- 示例 - Easy.pb
- 假的,文件 - 又一个.pb4
- 这里,那里 - 我不知道要做什么 do.pb3
- 这里,那里 - 随便.pb3
- 这第一个 1 - 这里的其他东西 (2).pb4
- 这第一个 1 - 这里的其他东西.pb4
- 这一招也一样 777 因为没有定界符.pb3
我有一个分隔符“-”。我需要创建一个文件夹,其名称与 3 个字符定界符之前的名称相同,并将所有以与定界符之前相同的名称开头的文件移动到该文件夹。
现在第一个问题是'delims'只接受一个字符。有了3我该怎么办?
第二个问题是在一些文件中这个模式“-”不存在。然后必须将文件移动到名为“0-TBC”的目录中。
第三个问题是当我的文件名中只有一个“-”字符时,它与我要查找的模式不匹配。在那种情况下,我应该找到模式,如果它不在文件名中,那么文件也应该移动到“0-TBC”文件夹中。
第四个问题是,当我运行上面的批处理文件时,显示的结果很好(除了它没有解决上面的两个问题)。然而,当我删除 'MD' 命令前面的 'ECHO' 时,它会将 SPACE 作为分隔符而不是 '-' 字符,因此它绝对不会按预期执行要做。
抱歉拖了这么久。非常感谢您的帮助。
您可以将字符串 SPACE + -
+ SPACE 替换为单个字符串文件名中不能出现的字符,如 |
,例如:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Change into root directory:
pushd "C:\Test_Directory" && (
rem // Loop through all matching files:
for /F "delims= eol=|" %%F in ('
dir /B -A:-D-H-S "*.pb*"
') do (
rem // Store current file name:
set "FILE=%%F"
rem // Toggle delayed expansion to avoid troubles with `!`:
setlocal EnableDelayedExpansion
rem // Replace ` - ` by `|` and split file names there:
for /F "tokens=1* delims=| eol=|" %%I in ("!FILE: - =|!") do (
endlocal
rem // Check file name:
if "%%J"=="" (
rem // File name contains no ` - `:
ECHO md "0-TBC" 2> nul
ECHO move "%%F" "0-TBC\"
) else (
rem // File name does contain `|`:
ECHO md "%%I" 2> nul
ECHO move "%%F" "%%I\"
)
)
)
rem // Return from root directory:
popd
)
endlocal
exit /B
我绝对不是开发人员,我需要您的帮助。我环顾了这个站点,发现了一些我认为可以满足我的需求但实际上不起作用的例子。 First example 或另一个 Second Exapmle 我创建了这个测试批处理文件:
@ECHO OFF
SETLOCAL
SET "sourcedir=C:\Test_Directory"
PUSHD %sourcedir%
FOR /f "tokens=1* delims=-" %%a IN (
'dir /b /a-d "*.pb*"'
) DO (
ECHO MD %%a
ECHO MOVE "%%a-%%b" .\%%a\
)
POPD
GOTO :EOF
我为测试目的创建了以下文件:
- 777 这个我没有定界符.pb4
- 现在任何一个简单且不难解决的问题 - 我们开始吧。pb4
- 现在任何一个简单且不难解决的问题 - 我们开始吧。pb5
- 也可能是 (The) - Something-like-this.pb4
- 更糟 - do.pb
- 示例 - Easy.pb
- 假的,文件 - 又一个.pb4
- 这里,那里 - 我不知道要做什么 do.pb3
- 这里,那里 - 随便.pb3
- 这第一个 1 - 这里的其他东西 (2).pb4
- 这第一个 1 - 这里的其他东西.pb4
- 这一招也一样 777 因为没有定界符.pb3
我有一个分隔符“-”。我需要创建一个文件夹,其名称与 3 个字符定界符之前的名称相同,并将所有以与定界符之前相同的名称开头的文件移动到该文件夹。
现在第一个问题是'delims'只接受一个字符。有了3我该怎么办?
第二个问题是在一些文件中这个模式“-”不存在。然后必须将文件移动到名为“0-TBC”的目录中。
第三个问题是当我的文件名中只有一个“-”字符时,它与我要查找的模式不匹配。在那种情况下,我应该找到模式,如果它不在文件名中,那么文件也应该移动到“0-TBC”文件夹中。
第四个问题是,当我运行上面的批处理文件时,显示的结果很好(除了它没有解决上面的两个问题)。然而,当我删除 'MD' 命令前面的 'ECHO' 时,它会将 SPACE 作为分隔符而不是 '-' 字符,因此它绝对不会按预期执行要做。
抱歉拖了这么久。非常感谢您的帮助。
您可以将字符串 SPACE + -
+ SPACE 替换为单个字符串文件名中不能出现的字符,如 |
,例如:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Change into root directory:
pushd "C:\Test_Directory" && (
rem // Loop through all matching files:
for /F "delims= eol=|" %%F in ('
dir /B -A:-D-H-S "*.pb*"
') do (
rem // Store current file name:
set "FILE=%%F"
rem // Toggle delayed expansion to avoid troubles with `!`:
setlocal EnableDelayedExpansion
rem // Replace ` - ` by `|` and split file names there:
for /F "tokens=1* delims=| eol=|" %%I in ("!FILE: - =|!") do (
endlocal
rem // Check file name:
if "%%J"=="" (
rem // File name contains no ` - `:
ECHO md "0-TBC" 2> nul
ECHO move "%%F" "0-TBC\"
) else (
rem // File name does contain `|`:
ECHO md "%%I" 2> nul
ECHO move "%%F" "%%I\"
)
)
)
rem // Return from root directory:
popd
)
endlocal
exit /B