我正在尝试创建一个.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
。我也有成千上万的文件和文件夹,所以我不能在脚本中写下文件或文件夹的名称。请告诉我匹配和自动移动文件的解决方案。我尝试了几个字符串,它只在批处理文件中移动指定名称的文件。
答案 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
。毫无疑问,您还需要从原始位置删除该文件。