我有一个批处理脚本,在我们的台式机和笔记本电脑上运行W8.1和W10已经很好了一段时间了。在没有声明“语法错误”的情况下,相同的脚本无法通过最后一行代码
if not exist C:\epic\tablet.txt if not exist C:\epic\laptop.txt (
@set SVPATH="D:\EPIC\Backup\"
) else (
@set SVPATH="C:\EPIC\Backup\"
)
@echo %SVPATH%
if not exist %SVPATH% mkdir %SVPATH%
之后有很多代码行,笔记本电脑和台式机也没有问题,但平板电脑无法超越最后一行。它只是提供以下输出,然后退出脚本:
ECHO is on.
>The syntax of the command is incorrect
>if not exists mkdir
>
看起来它实际上并没有为SVPATH设置一个值,但正如我所说的,这在桌面和运行Windows 8.1和Windows 10的loptop上运行得很好。只有Surface Pro 4才有问题,而且它不只是一个,这就是我们测试过的一切。
我没有Surface Pro,但请尝试以下批处理代码:
@echo off
set SVPATH=C:\EPIC\Backup
if not exist C:\epic\tablet.txt if not exist C:\epic\laptop.txt set SVPATH=D:\EPIC\Backup
echo %SVPATH%
md %SVPATH% 2>nul
set SVPATH=
需要在"
中包含文件/文件夹参数字符串,包含空格或其中一个字符&()[]{}^=;!'+,`~
,这不是这里的情况。因此,在此批处理文件中可以安全地省略双引号。
在任何情况下,环境变量SVPATH
都是用这个代码定义的,独立于两个文件C:\epic\tablet.txt
和C:\epic\laptop.txt
的存在。
建议将文件/文件夹字符串分配给环境变量,始终没有双引号到环境变量,而是按原样引用环境变量值,或者与其他环境变量值引用或用双引号括起来的固定字符串连接。
@echo off
set "SVPATH=C:\EPIC\Backup"
if not exist "C:\epic\tablet.txt" if not exist "C:\epic\laptop.txt" set "SVPATH=D:\EPIC\Backup"
echo %SVPATH%
md "%SVPATH%" 2>nul
set SVPATH=
请注意,推荐的语法set "Variable=Value"
需要启用命令扩展。有关此语法的更多详细信息,请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案