批处理文件将具有特定字符串的文件移动到特定文件夹

时间:2014-03-11 13:23:54

标签: batch-file

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

test-101.txt
test-102.doc

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

test-101
test-102

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

2 个答案:

答案 0 :(得分:2)

不需要批处理脚本。

如果目标文件夹已存在,则

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

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

答案 1 :(得分:0)

@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命令仅用于ECHO用于测试目的。 在您确认命令正确无法后,将ECHO MD更改为MD以实际创建目录。附加2>nul以禁止错误消息(例如,当目录已存在时)

为了测试目的,所需的MOVE命令仅为ECHO在您确认命令正确后,将ECHO MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved

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