批处理文件根据名称移动文件 w/o 创建新文件夹
Batch file to move files based on name w/o creating new folders
我需要根据文件名将文件从一个目录移动到另一个目录。这些文件的格式为 12345 123456.pdf
,其中 2 个字符串长度可以变化。不过它们之间总会有一个 space,而且它们总是 PDF 文件。
目标目录与文件名的第一个字符串同名(例如 10003075 3000101012.pdf
目标目录为 10003075
)。
如果目标目录不存在,我不想创建它。该文件应保留在初始目录中。
文件结构如下:
Main Folder
|
Destination Directories
Files waiting to be moved Directory
|
Batch file
所以批处理文件必须检查它所在的目录中的 pdf 文件,然后检查它上面的目录中与文件名中的第一个字符串对应的目录,然后将该文件移动到该目录仅当它存在,否则将文件留在原处。
我在 Whosebug 上使用了一些建议,但我所看到的一切都会创建目录或将文件移动到主目录(如果目录不存在)。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /f "tokens=1*delims= " %%a IN (
'dir /b /a-d "* *.pdf" '
) DO (
IF EXIST "..\%%a\." (ECHO(MOVE "%%a %%b" "..\%%a\") ELSE (ECHO(Leave "%%a %%b")
)
popd
GOTO :EOF
您需要更改 sourcedir
的设置以适合您的情况。将它分配给 %~dp0
是一种可能。
给定(部分目录 /a:d of %sourcedir%)
20/01/2015 09:49 <DIR> one
20/01/2015 09:49 <DIR> t w o
20/01/2015 09:50 <DIR> 1232
20/01/2015 09:50 <DIR> 1234
pdf 源目录:
你的目录:\sourcedir\t w o
20/01/2015 09:50 0 dum myfile2.pdf
20/01/2015 09:50 0 1231 54321.pdf
20/01/2015 09:50 0 1232 54321.pdf
20/01/2015 09:50 0 1233 54321.pdf
20/01/2015 09:50 0 1234 54321.pdf
20/01/2015 09:50 0 1235 54321.pdf
6 File(s) 0 bytes
这会产生
Leave "dum myfile2.pdf"
Leave "1231 54321.pdf"
MOVE "1232 54321.pdf" "..32\"
Leave "1233 54321.pdf"
MOVE "1234 54321.pdf" "..34\"
Leave "1235 54321.pdf"
所需的 MOVE 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(MOVE
更改为MOVE
以实际移动文件。附加 >nul
以禁止报告消息(例如 1 file moved
)
Leave
消息及其关联的 else
子句当然是可选的。
我需要根据文件名将文件从一个目录移动到另一个目录。这些文件的格式为 12345 123456.pdf
,其中 2 个字符串长度可以变化。不过它们之间总会有一个 space,而且它们总是 PDF 文件。
目标目录与文件名的第一个字符串同名(例如 10003075 3000101012.pdf
目标目录为 10003075
)。
如果目标目录不存在,我不想创建它。该文件应保留在初始目录中。
文件结构如下:
Main Folder
|
Destination Directories
Files waiting to be moved Directory
|
Batch file
所以批处理文件必须检查它所在的目录中的 pdf 文件,然后检查它上面的目录中与文件名中的第一个字符串对应的目录,然后将该文件移动到该目录仅当它存在,否则将文件留在原处。
我在 Whosebug 上使用了一些建议,但我所看到的一切都会创建目录或将文件移动到主目录(如果目录不存在)。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
PUSHD "%sourcedir%"
FOR /f "tokens=1*delims= " %%a IN (
'dir /b /a-d "* *.pdf" '
) DO (
IF EXIST "..\%%a\." (ECHO(MOVE "%%a %%b" "..\%%a\") ELSE (ECHO(Leave "%%a %%b")
)
popd
GOTO :EOF
您需要更改 sourcedir
的设置以适合您的情况。将它分配给 %~dp0
是一种可能。
给定(部分目录 /a:d of %sourcedir%)
20/01/2015 09:49 <DIR> one
20/01/2015 09:49 <DIR> t w o
20/01/2015 09:50 <DIR> 1232
20/01/2015 09:50 <DIR> 1234
pdf 源目录:
你的目录:\sourcedir\t w o
20/01/2015 09:50 0 dum myfile2.pdf
20/01/2015 09:50 0 1231 54321.pdf
20/01/2015 09:50 0 1232 54321.pdf
20/01/2015 09:50 0 1233 54321.pdf
20/01/2015 09:50 0 1234 54321.pdf
20/01/2015 09:50 0 1235 54321.pdf
6 File(s) 0 bytes
这会产生
Leave "dum myfile2.pdf"
Leave "1231 54321.pdf"
MOVE "1232 54321.pdf" "..32\"
Leave "1233 54321.pdf"
MOVE "1234 54321.pdf" "..34\"
Leave "1235 54321.pdf"
所需的 MOVE 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(MOVE
更改为MOVE
以实际移动文件。附加 >nul
以禁止报告消息(例如 1 file moved
)
Leave
消息及其关联的 else
子句当然是可选的。