0

我有一个批处理脚本,它在运行 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 有问题,而且不仅仅是一个,这就是我们测试过的所有内容。

4

1 回答 1

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"需要启用命令扩展。有关此语法的更多详细信息,请阅读为什么在命令行上使用 'set var = text' 后没有带有 'echo %var%' 的字符串输出?

于 2018-09-01T18:23:46.107 回答