Как обрабатывать пробелы в команде, заданной в планировщике задач в пакетном файле?

Я пытаюсь настроить расписание задач для выполнения команды, которая устанавливает пакеты Python. Однако путь пакетов содержит некоторое пространство. Я пробовал много способов, но не смог найти хорошего решения.

Пакетный файл

@echo on
SCHTASKS /delete /tn "test" /f
SCHTASKS /create /tn "test" /sc ONCE /ST 00:00 /RL HIGHEST /tr "cmd.exe /k pip install "C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl" "C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win32.whl""
SCHTASKS /run /tn "test"
pause

Результат:

C:\Windows\system32>SCHTASKS /delete /tn "test" /f
ERROR: The system cannot find the file specified.

C:\Windows\system32>SCHTASKS /create /tn "test" /sc ONCE /ST 00:00 /RL HIGHEST /tr "cmd.exe /k pip install "C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl" "C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win32.whl""
ERROR: Invalid argument/option - 'data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl C:\test'.
Type "SCHTASKS /CREATE /?" for usage.

C:\Windows\system32>SCHTASKS /run /tn "test"
ERROR: The system cannot find the file specified.

C:\Windows\system32>pause
Press any key to continue . . .

Помогите пожалуйста "убить" пробелы в коде.

Любая помощь приветствуется

Прежде всего удалите cd /d "Python-Installer", который не нужен и явно отображает ошибку (потому что так и должно было быть CD /D "C:\test data\Python-Installer"). Затем замените @echo on в следующей строке на Echo On (такой команды, как @echo, не существует). Ведущий символ требуется только в том случае, если на момент анализа строки echo не off. Это, конечно, означает, что on уже будет, и означает, что никогда не должно быть момента, когда @Echo On существует как команда в пакетном файле. Я бы также посоветовал вам удалить возможность запуска задачи с наивысшими привилегиями.

Compo 27.07.2024 11:30

@Compo, спасибо за совет. Я отредактировал сценарий. Пожалуйста, покажите мне, как позаботиться о некоторых пробелах в команде SCHTASKS /create

DuyXike 27.07.2024 11:38

Этот вопрос похож на: Как обращаться с символами кавычек при использовании cmd.exe. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

tripleee 27.07.2024 11:41

Прежде чем вы это сделаете, вам следует прежде всего использовать правильный синтаксис для команд, которые вы хотите cmd.exe запустить. Командную строку, следующую за /C, (по умолчанию) или /K, всегда следует заключать в двойные кавычки. Кроме того, при запуске cmd.exe было бы разумно использовать параметр /D перед /K.

Compo 27.07.2024 11:45

@tripleee Спасибо за совет. Я уже рассмотрел ваш аналогичный вопрос выше. Однако мой случай совсем другой. 1. команда cmd.exe является аргументом другой команды. 2. команда pip install, которую нужно выполнить в cmd.exe, также имеет следующие аргументы. 3. После pip install идут 2 аргумента, они тоже разделены пробелом. 4. Если бы была только одна посылка, я бы с ней справился. Это означает, что после pip install есть только один аргумент. Но с 2 пакетами я не смог. ---- Пожалуйста, помогите мне в этом конкретном случае.

DuyXike 27.07.2024 11:51

@tripleee, этот связанный вопрос не похож, и вопрос не требует редактирования, чтобы доказать обратное. Этот вопрос не касается обработки вложенных двойных кавычек в cmd.exe (о чем я уже говорил в своем предыдущем комментарии). Речь идет об обработке вложенных двойных кавычек в schtasks.exe.

Compo 27.07.2024 11:52

Если вы попробовали решения из дубликата, и ни одно из них не сработало, отредактируйте свой вопрос, чтобы показать нам, что именно вы пробовали и почему это не удалось (без изображений). Синтаксис цитирования не зависит от того, какую команду вы выполняете, даже в cmd

tripleee 27.07.2024 11:53

@triplee, это не решение описанной проблемы. Их целесообразно реализовать, но они не решат существующего вопроса. Команда cmd.exe здесь не запускается, поэтому сама по себе она пока не может быть проблемой.

Compo 27.07.2024 11:56

@Compo Раньше я так думал. Но когда я дважды заключил командную строку в кавычки, я не смог ее выполнить даже с одним аргументом после pip install. С этой командой pip install может работать. Вот почему я решил после этого расширить его на два аргумента. SCHTASKS /create /tn "test" /sc ONCE /ST 00:00 /RL HIGHEST /tr "cmd.exe /k pip install """C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl"""

DuyXike 27.07.2024 11:57

@tripleee Не думаю, что мой вопрос дублируется из этого поста. Спасибо за ваш комментарий.

DuyXike 27.07.2024 12:12

Пробовали cmd.exe /S /k "pip install "C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl" "C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win3‌​2.whl""? Пробовали cmd.exe /k @"pip install "C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl" "C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win3‌​2.whl""?

tripleee 27.07.2024 12:16

@DuyXike, команда cmd.exe должна выглядеть примерно так: C:\Windows\System32\cmd.exe /D /S /K "@"C:\Users\DuyXike\Appdata\Local\Programs\Python\Python312\‌​Scripts\pip.exe" install "C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl" "C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win3‌​2.whl"".

Compo 27.07.2024 12:21

@tripleee Я пробовал все раньше. ошибка: ERROR: Invalid argument/option - 'install'. Обратите внимание, что cmd.exe является аргументом команды SCHTASKS /create. Я мог бы выполнить команду, как вы предложили, если это одна команда в командном файле.

DuyXike 27.07.2024 12:30

@Compo Я попробовал ваше предложение, код будет SCHTASKS /create /tn "test" /sc ONCE /ST 00:00 /RL HIGHEST /tr "C:\Windows\System32\cmd.exe /D /S /K "@"C:\Program Files (x86)\Python36-32\Scripts\pip.exe" install "C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl" "C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win3‌​2.whl""", а результат — ошибка ERROR: Invalid argument/option - 'install'.

DuyXike 27.07.2024 12:35

@DuyXike, я дал тебе только команду cmd.exe. Похоже, вы решили, что я дал вам ответ на сообщенную вами проблему, но это неверно. Нет смысла заставлять команду C:\Windows\System32\schtasks.exe работать, пока вы не исправите отдельные компоненты. Затем вы можете решить проблему, следуя рекомендациям документации. Пробелы в путях к файлам можно использовать, используя два набора кавычек: один для cmd.exe, другой для schtasks.exe. Внешние кавычки для cmd.exe должны быть двойными; внутренние кавычки могут быть одинарными ' или экранированными двойными кавычками \".

Compo 27.07.2024 12:59

Все отличные советы от cmd-line, все звезды выше. ИМХО, вы можете устранить целый класс проблем, не используя пробелы в именах каталогов/папок. Да, я знаю, что C:\Program Files и т. д. встроены, но зачем самому создавать себе проблемы, связанные с космосом? (-;! Удачи.

shellter 27.07.2024 19:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
16
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В дополнение к моим комментариям, вот моя интерпретация документированной методологии цитирования, основанная на правильных cmd.exe параметрах и аргументах, а также отправленных вами командах.

Echo On
%SystemRoot%\System32\schtasks.exe /Delete /TN "test" /F
%SystemRoot%\System32\schtasks.exe /Create /TN "test" /TR "%SystemRoot%\System32\cmd.exe /D /S /K \"@\"%ProgramFiles(x86)%\Python36-32\Scripts\pip.exe\" install \"C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl\" \"C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win32.whl\"\"" /SC ONCE /ST 00:00
%SystemRoot%\System32\schtasks.exe /Run /TN "test"
Pause

Обратите внимание, что я намеренно удалил параметр и аргумент /RL HIGHEST. Я не вижу причин, по которым вы должны устанавливать как СИСТЕМУ, и при этом иметь задачу с опцией cmd.exe/K, работающей в фоновом режиме.

Большое спасибо. Ваш результат работает как шарм. Однако, прежде чем получить ваш результат, я попробовал эту строку, она тоже работает, но я не совсем понимаю, какова роль каждой двойной кавычки. SCHTASKS /create /tn "peritec" /sc ONCE /ST 00:00 /tr "cmd.exe /k """pip install """C:\test data\Python-Installer\numpy-1.19.5-cp36-cp36m-win32.whl""" """C:\test data\Python-Installer\opencv_python-4.5.4.60-cp36-cp36m-win3‌​2.whl""""

DuyXike 27.07.2024 22:04

Спасибо за отзыв о моем решении @DuyXike. Независимо от того, работает ли у вас экранирование вложенных двойных кавычек с помощью двух дополнительных двойных кавычек, то, что вы отправили в комментарии выше, не так надежно, менее эффективно и займет немного больше времени. Конечно, это ваша задача и ваш выбор, как вы решите действовать.

Compo 27.07.2024 23:04

Другие вопросы по теме