我正在尝试运行一个bat文件:
.log
分机号MyFile_customString.log
到另一个文件夹到目前为止,我做到了这一点:
@echo off
set host_name=%1
set origin_path=%2
set destiny_path=%3
set destiny_host_path=%destiny_path%\%host_name%\
mkdir .\%destiny_host_path%
FOR %%G IN (%origin_path%/*.log) DO (
SET _fileName=%%G
SET _custom=%_fileName:.log=_%%host_name%.log%
xcopy /Y /F %origin_path%\%_fileName% %destiny_host_path%\%_custom%
)
将MyTest.log和MyTest2.log文件放在origin_path
仅MyTest2.log文件中复制到destiny_host_path
我错过了什么?
答案 0 :(得分:4)
在SetLocal EnableDelayedExpansion
@echo
在您的代码中:
FOR %%G IN (%origin_path%/*.log) DO (
SET _fileName=%%G
SET _custom=%_fileName:.log=_%%host_name%.log%
xcopy /Y /F %origin_path%\%_fileName% %destiny_host_path%\%_custom%
)
应该是:
FOR %%G IN (%origin_path%/*.log) DO (
SET "_fileName=%%G"
FOR %%H in (!host_name!) Do (
SET "_custom=!_fileName:.log=_%%H.log!"
)
xcopy /Y /F !origin_path!\!_fileName! !destiny_host_path!\!_custom!
)
答案 1 :(得分:0)
FOR %%G IN (%origin_path%\*.log) DO (
xcopy /Y /F "%origin_path%\%%G" "%destiny_host_path%\%%~nG_%host_name%.log"
)
(未测试的)
在这种情况下无需delayedexpansion
。
请参阅提示中的for /? |more
,了解有关使用~
- 修饰符来提取部分文件名的信息。
在您的原始文件中,%
行中的%
不平衡(假设set _custom
在该上下文中是正确的)。
提示:暂时将xcopy
替换为echo xcopy
显示,而不是执行命令 - 如果出现错误,则更容易调试。