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

问题描述 投票:0回答:1

我有一个批处理脚本,在我们的台式机和笔记本电脑上运行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才有问题,而且它不只是一个,这就是我们测试过的一切。

windows batch-file windows-10 surface-pro
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"需要启用命令扩展。有关此语法的更多详细信息,请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案

© www.soinside.com 2019 - 2024. All rights reserved.