【问题标题】:Batch File to move files with a Specific String to a Specific Folder将具有特定字符串的文件移动到特定文件夹的批处理文件
【发布时间】:2023-07-11 20:24:01
【问题描述】:

我正在尝试创建一个 .bat 文件以将具有特定字符串的文件移动到特定文件夹。 对于前。 C:\Test 在这个测试文件夹中有几个文件,如:

test-101.txt
test-102.doc

我还创建了文件夹 D:\Destination 并在其中创建了几个文件夹,例如:

test-101
test-102

我想匹配字符串'test-101' 并将其移动到文件夹'test-101''test-102.doc' 相同,它将移至 test-102。我也有成千上万个这样的文件和文件夹,所以我不能在脚本中写下文件或文件夹的名称。请告诉我自动匹配和移动文件的解决方案。我尝试了几个字符串,它只在批处理文件中移动具有指定名称的文件。

【问题讨论】:

  • test 后面的数字范围是多少?我的意思是,您有以“Test99...”或“Test4000000...”开头的文件吗?
  • 文件都在一个原始文件夹中,还是在子文件夹中?
  • 您真的要移动文件吗?还是复制它们(以便原件保留在原处)?
  • 为什么不写程序而不写批处理文件呢?使用程序处理异常会好得多。编写这样一个程序只需要几分钟!

标签: batch-file


【解决方案1】:

不需要批处理脚本。

如果目标文件夹已经存在,那么

for %F in (c:\test\*) do move "%F" "d:\destination\%~nF\" >nul

如果目标文件夹可能还不存在,那么

for %F in (c:\test\*) do (md "d:\destination\%~nF"&move "%F" "d:\destination\%~nF\") >nul

如果您最终在批处理脚本中使用此代码,那么不要忘记将所有百分比加倍。

【讨论】:

    【解决方案2】:
    @ECHO OFF
    SETLOCAL
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET "sourcedir=c:\sourcedir"
    SET "destdir=c:\destdir"
    FOR /f "delims=" %%a IN (
     'dir /b /a-d "%sourcedir%\*" '
     ) DO (
     ECHO MD "%destdir%\%%~na"
     ECHO MOVE "%sourcedir%\%%a" "%destdir%\%%~na\"
    )
    GOTO :EOF
    

    所需的 MD 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO MD 更改为MD 以实际创建目录。附加 2>nul 以抑制错误消息(例如,当目录已存在时)

    所需的 MOVE 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO MOVE 更改为MOVE 以实际移动文件。附加>nul 以禁止报告消息(例如1 file moved

    还请注意,如果源和目标位于不同的驱动器上,您可能需要COPY /B 文件而不是MOVEing 它们。毫无疑问,您还需要从原始位置删除文件。

    【讨论】:

      最近更新 更多