我想知道是否有人可以帮助我使用 CMD 将一些代码作为批处理文件运行。我在目录中有一个文件列表,我希望用“Thisisnew_”替换文件名(例如“Myprefix-”)并将文件移动到新位置。
文件名目前类似于 MyPrefix-INVOICE1_C.PDF 我希望将它们替换为 Thisisnew_INVOICE_C.PDF 然后将它们移动到另一个目录(而不是复制)
我已经找到了这个脚本,但是即使我在末尾添加暂停,我仍然看不到问题所在,因为它没有运行。
@ECHO ON
SET Loc1Dir=D:\sql\Reports\Mycustomer\Incoming
SET Loc2Dir=D:\sql\Reports\Mycustomer\PDF
CD /D "%Loc1Dir%"
FOR /R %%F IN ("*-*.PDF") DO CALL :copyFile %%~F %%~NXF
GOTO: EOF
:copyFile
SET copyfname=%~1
SET fname=%~2
SET fname=%fname:MyPrefix-=Thisisnew_%
ECHO F | XCOPY /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::XCOPY /Y /F "%copyfname%" "%Loc2Dir%\"
:::REN "%copyfname%" "%fname%"
GOTO :EOF
笔记:
我用于
U:
测试,因此任何驱动器引用都已更改。变化:
插入
setlocal
。这可确保运行一个批次对环境所做的更改不会污染同一cmd
实例中下一个批次运行的环境。用于
set "var=value"
设置字符串值 - 这可以避免由尾随空格引起的潜在问题。在文件掩码中使用必需的前缀,以便仅检测文件。这消除了检测到名为的文件并将其更改为的
myprefix-*
可能性NOTmyprefix-*
NOTThisisnew_*
我倾向于避免使用 ADFNPSTXZ(无论哪种情况),因为 ADFNPSTXZ 也是元变量(循环控制变量),这可能会导致难以发现的错误(请参阅
for/f
文档提示) - 元变量从更改F
为E
传递给子程序的带引号的参数可以避免可能出现的空格问题。
语法错误 -
GOTO: EOF
应该是GOTO :EOF
构建并回显相关
move
命令以供验证。验证后,删除echo
关键字即可激活。附加>nul
到抑制...file(s) copied
报告。要使用点击和咯咯笑方法查看报告,请在该行
PAUSE
后插入一行for...
我似乎现在可以正常工作了。刚接触批处理脚本,没有意识到 :::lines 被注释掉了。我切换了底部的 2 行,它似乎起作用了