【问题标题】:Batch file to move files based on name w/o creating new folders批处理文件以根据名称移动文件而无需创建新文件夹
【发布时间】:2015-01-20 00:12:24
【问题描述】:

我需要根据文件名将文件从一个目录移动到另一个目录。这些文件的格式为12345 123456.pdf,其中两个字符串的长度可能会有所不同。不过,它们之间总会有一个空格,而且它们始终是 PDF 文件。

目标目录与文件名的第一个字符串同名(例如,10003075 3000101012.pdf 目标目录将是 10003075)。

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

文件结构如下:

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

所以批处理文件必须检查它所在的目录是否有 pdf 文件,然后检查它上面的目录是否有与文件名中的第一个字符串对应的目录,然后仅当该文件存在时才将该文件移动到该目录否则将文件留在原处。

我已经在 stackoverflow 上提出了一些建议,但是如果目录不存在,我所看到的所有内容要么创建目录,要么将文件移动到主目录。

【问题讨论】:

  • 一定要批处理,为什么不用powershell?
  • @JamesBlond:我从来没有用过powershell。

标签: batch-file file-moving


【解决方案1】:
@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 的来源目录:

你的目录:\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 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(MOVE 更改为MOVE 以实际移动文件。附加&gt;nul 以禁止报告消息(例如1 file moved

Leave 消息及其关联的else 子句当然是可选的。

【讨论】:

  • 非常感谢 Magoo。这正是我所需要的,而且比我要去的地方简单得多。我想在接近尾声时编辑您的说明。我不得不将 (ECHO(MOVE 更改为 (MOVE 和 (ECHO(Leave to (Leave)。在 MOVE 和 Leave 之前删除 ( 会导致错误。再次感谢您和出色的工作。
猜你喜欢
  • 2019-11-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
相关资源
最近更新 更多