我需要根据文件名将文件从一个目录移动到另一个目录。文件的格式为12345 123456.pdf
,其中两个字符串的长度可以不同。尽管它们之间总是有一个空间,而且它们总是PDF文件。
目标目录与文件名的第一个字符串的名称相同(例如10003075 3000101012.pdf
目标目录为10003075
(。
如果目标目录不存在,我不希望创建它。该文件应保留在初始目录中。
文件结构如下:
Main Folder
|
Destination Directories
Files waiting to be moved Directory
|
Batch file
因此,批处理文件必须检查其所在的目录中的pdf文件,然后检查其上方的目录中对应于文件名中第一个字符串的目录,然后仅在存在时将该文件移动到该目录,否则将文件保留在原地。
我已经处理了一些关于stackoverflow的建议,但我所看到的一切都会创建目录,或者如果目录不在,则将文件移动到主目录。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:sourcedirt 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
是可能的。
给定(%sourcedir%的部分目录/a:d(
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
和pdfs来源的目录:
u:\sourcedir\t的目录不带
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" "..1232"
Leave "1233 54321.pdf"
MOVE "1234 54321.pdf" "..1234"
Leave "1235 54321.pdf"
所需的MOVE命令仅用于测试目的的ECHO
验证命令正确后,将ECHO(MOVE
更改为MOVE
以实际移动文件。附加>nul
以抑制报告消息(例如1 file moved
(
Leave
消息及其相关的else
子句当然是可选的。