我有一个简单的批处理文件,其中包含一行:
if not exist "C:\users\fred\desktop\b\" ( md "C:\users\fred\desktop\b" ) &© /Y "C:\users\fred\desktop\b.txt" "C:\users\fred\desktop\b\"
您可以看到此意图-如果桌面上不存在特定文件夹,请创建它。无论该文件夹是否已经存在,都将一个特定的文件复制到该文件夹中。
请注意,同一行上有两个命令-IF条件命令和使用“ &&”运算符的复制命令。
但是当我执行它时,它仅在文件夹不存在时才起作用。然后,它创建文件夹并将文件复制到该文件夹。如果该文件夹已经存在,则不执行任何操作。就像它认为整个事情都处于IF条件一样,而与文件夹创建周围的'('和')'无关。
我发誓这可以在Windows的早期版本中使用...但是我可能错了。
FWIW,Windows 10 32位。
答案 0 :(得分:2)
您发布的代码在以前的Windows版本中也不起作用。
按照书面规定,您的代码会显示如果该文件夹不存在,请创建目录并复制文件。如果该目录存在,则它永远不会进入复制文件部分。
您想要的是使副本能够正常工作,而不管是否必须创建目录,因此您需要使用两条单独的行。
if not exist "C:\users\fred\desktop\b\" md "C:\users\fred\desktop\b"
copy /Y "C:\users\fred\desktop\b.txt" "C:\users\fred\desktop\b\"
答案 1 :(得分:1)
正如CatCat的评论所建议的那样,改为使用XCopy
呢?
在目标上带有反斜杠,如果尚不存在则将创建它。
示例:
Xcopy "%UserProfile%\Desktop\b.txt" "%UserProfile%\Desktop\b\" /H /K /Q /R /Y
您可以根据需要调整选项,输入XCopy /?
作为使用信息。
答案 2 :(得分:0)
if
命令的随后部分延伸到该行的末尾,并且可能包含由&
,&&
或||
分隔的几个命令。自Windows NT诞生以来cmd.exe
以来一直如此。
要限制那么部分并将脚本保持在一行上,可以将if
放在带括号的复合命令中:
( if not exist "C:\users\fred\desktop\b\" md "C:\users\fred\desktop\b" ) & copy /y "C:\users\fred\desktop\b.txt" "C:\users\fred\desktop\b\"
( if not exist "directory" md "directory" )
通过将if
放在带括号的复合命令中,我们确保then-part不会延伸到行的末尾
&
命令分隔符。
copy /y "file" "directory"
无论上一条命令的退出状态如何,都执行。