我有一个文件夹 xyz 。它有一个批处理文件,可以将文件从源目录 abc 复制到目标目录 def 。我正在使用copy
选项/v /y
。
复制工作绝对正常。但是我注意到一个奇怪或奇怪的问题,另外从源到目标复制的所有文件的副本都存在于文件夹 xyz 中。
我在系统重启后开始观察此问题,并且不确定它是否是一次性问题。但我想知道是否有人之前遇到过这个问题,可能的解决办法是什么?
以下是代码:
@if not defined ECHO_ON echo off
SETLOCAL EnableDelayedExpansion
set arg1=%1
set arg2=%2
copy /v /y !arg1! !arg2!
call :getPath !arg1!
ren !arg2!\!_NAME_EXT! !_NAME!.svg
:getPath
set _NAME=%~n1
set _NAME_EXT=%~nx1
set _LOC=%~dp1
goto:eof
endlocal
请注意我在同一个.bat文件中使用copy
和robocopy
命令(用于其他一些复制操作)。
这有什么值得担心的吗?
(因为我写的东西工作正常,直到重新启动。)
答案 0 :(得分:1)
您的双Copy
是因为批处理脚本逐行工作,直到它到达文件结束标记或退出指令。 Call
命令返回到Call
指令之后的点。当它返回时,在脚本底部之前没有退出指令或文件结束标记,因此再次执行:getPath
标签。
对于EnableDelayedExpansion
任何变量或Set
命令,您的脚本中Call
似乎完全没有理由。因此,我将其简化为:
@Echo Off
If "%~2"=="" Exit /B
If Not Exist "%~2\" MD "%~2" 2>Nul || Exit /B
If Exist "%~1" Copy /V /Y "%~1" "%~2\%~n1.svg"
我希望它可以帮助你。