我是批处理脚本的新手,所以请耐心等待。
我的目标是移动具有相同文件名但扩展名不同的文件;比如我想移动 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 !!!!
答案 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
可能会覆盖现有文件。