这段代码非常适合我将具有相同文件名但不同扩展名的文件 move 到子文件夹中。
所以当前的逻辑是:如果 NC1 文件与 PDF 文件具有相同的文件名,则将该 NC1 move 到其各自的子文件夹。
但是我的文件没有相同的文件名。
以下是 2 个示例文件:
- “f100.nc1”
- “999-P-f100 - 板 - Rev 0 - 287x200.pdf”
如何更改此代码以遵循以下逻辑:如果 PDF 文件名包含 NC1 文件的文件名,则将该 NC1 move 到其各自的子文件夹。
for %%j in ("..\2PDF_Outsourced\1PDF_Heavy\*.pdf") do (
if exist "%%~nj.nc1" (
move /-y "%%~nj.nc1" "\2NC1_Outsourced\1NC1_Heavy"
)
)
for %%j in ("..\2PDF_Outsourced\1PDF_Light\*.pdf") do (
if exist "%%~nj.nc1" (
move /-y "%%~nj.nc1" "\2NC1_Outsourced\1NC1_Light"
)
)
预先感谢您的帮助。我在这个阶段已经停留了一段时间,并且正在努力理解分隔符、字符串和通配符。
最佳答案
诀窍是扭转你的逻辑。迭代 .nc1 文件,然后查看是否存在匹配的 .pdf(带有通配符)。为 Heavy 和 Light 添加第二个循环可以避免代码复制。
for %%F in ("*.nc1") do for %%P in (Heavy Light) do (
if exist "..\2PDF_Outsourced\1PDF_%%P\*%%~nF*.pdf" (
if exist "%%F" move /-y "%%F" "\2NC1_Outsourced\1NC1_%%P"
)
)
编辑
我在上面的代码中添加了第二个 IF EXIST,以防名称与 Heavy 和 Light pdf 文件匹配。
如果 Endoro 关于忽略与较大单词的子字符串匹配的名称的担忧是有效的,则可以扩展上述内容:
for %%F in ("*.nc1") do (
set "name=%%~nF"
setlocal enableDelayedExpansion
for %%C in (. [ ^^) do set "name=!name:%%C=\%%C!"
for %%N in (!name!) do (
endlocal
for %%P in (Heavy Light) do for /f "eol=: delims=" %%A in (
'dir /b /a-d "..\2PDF_Outsourced\1PDF_%%P\*%%~nF*.pdf"^|findsdr /i "\<%%N\>"'
) do if exist "%%F" move /-y "%%F" "\2NC1_Outsourced\1NC1_%%P"
)
)
关于search - 批处理文件为: move files into a sub folder if they contain the filename of another file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696158/