为什么我的批处理文件在当前文件夹中创建了另一个副本?

时间:2018-03-12 13:37:01

标签: batch-file batch-processing

我有一个文件夹 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文件中使用copyrobocopy命令(用于其他一些复制操作)。

这有什么值得担心的吗?

(因为我写的东西工作正常,直到重新启动。)

1 个答案:

答案 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"

我希望它可以帮助你。