【问题标题】:Batch Script runs on Windows 10 Pro but not on Surface Pro 4批处理脚本在 Windows 10 Pro 上运行,但不在 Surface Pro 4 上运行
【发布时间】:2019-02-06 17:47:40
【问题描述】:

我有一个批处理脚本,它在运行 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 有问题,而不是只有一个,这是我们测试过的全部。

【问题讨论】:

  • 检查您的逻辑 - 第二个 if 有一个 else,但第一个没有。您可能需要另一对括号。
  • 不,这没有帮助。还要记住,除了 Surface Pro 之外,这在任何地方都可以正常工作。 Microsoft 是否会在平板电脑版本的 Windows 10 上加载不同版本的批处理解释器?
  • 我不知道。可以输入cmd查看版本。这两个 .txt 文件的存在呢? (只是为了确定:您显示的代码是完整的代码还是周围有什么?)
  • 您不需要在创建目录之前检查它是否存在。只需创建它并将错误重定向到 nul。 md mydir 2>nul

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


【解决方案1】:

我没有 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?上的答案

【讨论】:

  • 感谢您提供的信息,但我讨厌批处理。我最终堆叠了 if 语句并让它在两个系统上都可以工作。但这就是为什么我们建议在我的工作场所使用 python 编写所有脚本的原因。只要安排允许,这将被重写!
猜你喜欢
  • 2017-02-17
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多