Windows 10批处理文件-IF使用情况

时间:2018-12-02 04:33:09

标签: windows cmd

我有一个简单的批处理文件,其中包含一行:

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条件命令和使用“ &&”运算符的复制命令。

但是当我执行它时,它仅在文件夹不存在时才起作用。然后,它创建文件夹并将文件复制到该文件夹​​。如果该文件夹已经存在,则不执行任何操作。就像它认为整个事情都处于IF条件一样,而与文件夹创建周围的'('和')'无关。

我发誓这可以在Windows的早期版本中使用...但是我可能错了。

FWIW,Windows 10 32位。

3 个答案:

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

    无论上一条命令的退出状态如何,都执行。