在Windows批处理中按扩展名移动特定文件

时间:2013-05-10 21:13:20

标签: batch-file

我是批处理脚本的新手,所以请耐心等待。

我的目标是移动具有相同文件名但扩展名不同的文件;比如我想移动 myfile.txt.1 myfile.txt.2 而不“触摸” myfile.txt 我已经设法使用通配符*但它在逻辑上移动了我不想移动的文件。(即 myfile.txt

我的问题是......我正在考虑使用 for loop 来计算文件并使用“count”变量而不是*,但是有更直接的方法来实现这个脚本?

附加我的脚本:

cd my_path
mkdir test 
robocopy "src" "dest" "my_file.*"
echo The file was moved succesfully !!!!

2 个答案:

答案 0 :(得分:1)

我认为robocopy应该能够满足您的需求。

我原本期望通配符"my_file.txt.*"可以正常工作,但有趣的是,尽管缺少尾随my_file.txt,它仍匹配.

但添加/xf选项以排除“未修饰”的文件名对我有用:

robocopy "src" "dest" "my_file.txt.*" /xf "my_file.txt"

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL

SET sourcedir=c:\sourcedir
SET destdir=c:\destdir
FOR %%i IN ("%sourcedir%"\*.*) DO (
 FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%destdir%\%%~nxi" (
  ECHO CAN NOT MOVE "%%~fi" "%destdir%\%%~nxi"
 ) ELSE (ECHO MOVE "%%~fi" "%destdir%\%%~nxi")
)

GOTO :EOF

这应该完成任务AAUI。它还检测目标目录中是否存在冲突文件名。在验证测试后,只需从ECHO中删除ECHO MOVE即可激活。就个人而言,我会按原样离开ECHO CAN NOT MOVE报告问题。将其更改为MOVE可能会覆盖现有文件。