批处理脚本在Windows 10 Pro上运行,但不在Surface Pro 4上运行

时间:2018-08-31 16:50:51

标签: windows batch-file windows-10 surface-pro

我有一个批处理脚本,该脚本在运行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的台式机和笔记本电脑上都可以正常工作。只有Surface Pro 4s才有问题,并非如此只是其中一项,我们已经测试过。

1 个答案:

答案 0 :(得分:0)

我没有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.txtC:\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?

上的答案