Пакетный скрипт запускается в Windows 10 Pro, но не в Surface Pro 4 - PullRequest
0 голосов
/ 31 августа 2018

У меня есть пакетный скрипт, который успешно работает на наших настольных компьютерах и ноутбуках под управлением 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 4, и это не так. только один, это все, что мы тестировали.

1 Ответ

0 голосов
/ 01 сентября 2018

У меня нет 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" требует включенных расширений команд. Подробнее об этом синтаксисе читайте в ответе на Почему нет строкового вывода с 'echo% var%' после использования 'set var = text' в командной строке?

...