#eclipse #batch-file #tomcat9
Вопрос:
Я новичок в написании сценариев и не могу заставить этот работать. Я мог бы, если бы переместил файлы в путь без пробела, но я бы хотел, чтобы он работал с пробелом, если бы мог.
Я хочу извлечь кучу обновлений Office в папку с файлом .cmd. Чтобы сделать пакетный файл доступным для использования на любом компьютере, я установил переменную пути, которую мне нужно изменить только в одном месте, чтобы запустить ее на другой машине. Проблема в том, что в пути есть пробел. Если я поставлю кавычки вокруг пути в определении, cmd.exe помещает их по пути, прежде чем он добавит имя файла и переключится, и пакет завершится неудачей с «синтаксической ошибкой командной строки». Без кавычек он завершается ошибкой с «не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл».
Для тестирования я использую переключатель справки до тех пор, пока или если я смогу заставить его работать. Я могу сделать это, используя имя файла/папки 8.3 (например, Мои документы как MyDocu~1), но можно ли это сделать по-другому?
Комментарии:
1. В кавычках должен содержаться путь с именем файла, за которым должны следовать параметры командной строки. Можете ли вы дать более подробную информацию о том, как создается командная строка? Точно, что вы имеете в виду под > Если я поставлю кавычки вокруг пути в определении, cmd.exe помещает их по пути, прежде чем он добавит имя файла и переключится
Ответ №1:
Попробуйте что-нибудь вроде этого:
SET MY_PATH=C:Folder with a space
"%MY_PATH%MyProgram.exe" /switch1 /switch2
Комментарии:
1. Это то, что я сделал, используя Замену в Блокноте. Спасибо.
2. Рад, что это помогло. Было бы неплохо, если бы вы поддержали и приняли любой ответ, который, по вашему мнению, помог вам.
Ответ №2:
Я использую
set "VAR_NAME=<String With Spaces>"
при обновлении пути:
set "PATH=%UTIL_DIR%;%PATH%"
Комментарии:
1. это должно быть общепринятым ответом. по какой-то причине вызов set из блока if не работает, если значение имеет пробел и не закавычено.
Ответ №3:
Здесь есть два варианта. Во-первых, вы можете сохранить путь без кавычек и просто процитировать его позже:
set MyPath=C:Program FilesFoo
"%MyPath%foo with spaces.exe" something
Другой вариант, который вы могли бы использовать,-это подпрограмма, которая позволяет удалять строки без кавычек (но в данном случае это на самом деле не очень хорошая идея, так как вы добавляете кавычки, удаляете их и снова добавляете их без пользы).:
set MyPath="C:Program FilesFoo"
call :foo %MyPath%
goto :eof
:foo
"%~1foo.exe"
goto :eof
%~1
Удаляет кавычки вокруг аргумента. Это удобно при передаче имен папок в кавычках, но, как уже говорилось ранее, в данном конкретном случае это не лучшая идея 🙂
Комментарии:
1. Я использовал первый метод, используя Замену в блокноте. Второй вариант казался излишне сложным. Спасибо.
2. У меня есть пакетный файл, который получает параметры. Использование
set LALA=%~1
было тем, что работало на меня.3. 2-й метод идеально работает, когда вы используете субрутины
Ответ №4:
Попробуйте это;
- создайте переменную, как показано ниже
SET "SolutionDir=C:Test projectsAutomation testsbinDebug"**
- Затем замените путь переменной. Не забудьте добавить кавычки для начала и конца
vstest.console.exe "%SolutionDir%Automation.Specs.dll"
Ответ №5:
Я всегда помещаю путь в двойные кавычки, когда создаю файл .bat. (Я просто добавил ПАУЗУ, чтобы она не закрывала экран.)
Например:
"C:Program FilesPageTechPCLReader64_131PCLReader64.exe"
PAUSE
Ответ №6:
Правильный способ сделать это таков:
@ECHO off
SET MY_PATH=M:Dir^
With SpacesSub Folder^
DirFolder
:: calls M:DirWith SpacesSub FolderDirFolderhello.bat
CALL "%MY_PATH%hello.bat"
pause
Ответ №7:
Самый простой способ исправить эту проблему-заключить имя папки в кавычки:
(cdNew Folder...) --> (cd"New Folder"...)
Надеюсь, это поможет.
Ответ №8:
Если вам нужно сохранить постоянный путь (путь не изменяется при перезапуске cmd)
- Запустите командную строку от имени администратора (щелкните правой кнопкой мыши на cmd.exe и выберите запуск от имени администратора)
- В cmd
setx path "%path%;your new path"
затем введите - Проверьте, правильно ли выбран путь, введя путь и нажав клавишу ввод
Комментарии:
1. Я думаю, что вопрос не в переменной ПУТИ , а скорее в переменной пути . Операция, по-видимому, хочет сохранить определенный путь в переменной и использовать значение в пакетном сценарии.
Ответ №9:
Представьте себе, недавно у меня была такая же проблема…
Folder
└ File1.txt
└ File2.txt
Вопрос
Вы правы, если добавите «» вокруг пути…
SET RootFolder="C:Folder with spaces"
затем это делает его непригодным для использования, если вы хотите затем добавить имена файлов и т. Д. (Без какой-либо промежуточной обработки строки…
FOR %%F IN * DO (COPY %%F "%RootFolder%%%F")
❌ COPY File1.txt ""C:Folder with spaces"File1.txt"
❌ COPY File2.txt ""C:Folder with spaces"File2.txt"
Решение
Ключ состоит в том, чтобы по-прежнему использовать»», но помещать их вокруг всего оператора SET (т. Е. Перед именем переменной).
SET "RootFolder=C:Folder with spaces"
Это будет работать, когда вам нужно будет повторно использовать переменную
FOR %%F IN * DO (COPY %%F "%RootFolder%%%F")
✅ COPY File1.txt "C:Folder with spacesFile1.txt"
✅ COPY File1.txt "C:Folder with spacesFile2.txt"
Ответ №10:
также просто попробуйте добавить двойные косые черты, как это работает только для меня
установить dir=»C:\1. Какая-То Папка\Какая-То Другая Папка\Просто Потому, Что»
@echo на MKDIR %реж.%
OMG после публикации они удалили второе в моем посте, поэтому, если вы откроете мой комментарий, и он покажет три, вы должны прочитать их как два……