批处理文件,用于根据名称移动文件,无需创建新文件夹

时间:2015-01-20 00:12:24

标签: batch-file file-moving

我需要根据文件名将文件从目录移动到另一个目录。文件格式为12345 123456.pdf,其中2个字符串长度可以变化。但它们之间总会有一个空格,它们总是PDF文件。

目标目录是SAME NAME,作为文件名的第一个字符串(例如10003075 3000101012.pdf目标目录为10003075)。

如果目标目录不存在,我不希望它被创建。该文件应保留在初始目录中。

文件结构如下:

Main Folder
  |
  Destination Directories
  Files waiting to be moved Directory
    |
    Batch file 

因此批处理文件必须检查它所在的pdf文件目录,然后检查其上方的目录,找到与文件名中第一个字符串对应的目录,然后将该文件移动到该目录,只要它存在否则将文件留在原处。

我已经处理了一些有关stackoverflow的建议,但是我看到的所有内容都会创建目录,或者如果目录不存在,则将文件移动到主目录。

1 个答案:

答案 0 :(得分:0)

@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是可能的。

给定(%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

和PDF格式的源代码:

目录u:\ 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" "..\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子句当然是可选的。