Пакетное использование строки в качестве активной консольной команды
Моя проблема в том, чтобы прочитать строку из test.txt
и введите его как консольную команду.
Пример: пользователю предлагается указать путь к папке с песочницей, и в то же время в консоли он уже предлагается (из сохраненного test.txt
), только ожидая, когда пользователь нажмет ENTER
Path to your sandboxes folder: C:\Whatever\Path\Sandboxes
куда Path to your sandboxes folder:
является частью set /p
команда в скрипте, ожидающая ввода; а также C:\Whatever\Path\Sandboxes
был введен сценарием как предварительно предложенный путь. Отсюда пользователь может либо нажать ENTER, если он удовлетворен предложенным путем, либо отредактировать его: C:\Whatever\OtherPath\Sandcastles
Я предполагаю, что первым шагом было бы прочитать из test.txt
в переменную, но как мне перейти оттуда? Как мне ввести символы этой строковой переменной в консоль?
3 ответа
Сочетая его с Cscript.
@if (@CodeSection == @Batch) @then
@echo off
for /f "tokens=* delims=" %%i in (test.txt) do set "output=%%I"
CScript //nologo //E:JScript "%~F0" "%output%"
set /P "var=Path to your sandboxes folder: "
echo selected path = %var%
goto :EOF
@end
WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));
Невозможно с чистой партией, но вы можете использовать значение по умолчанию (потому что set /p
не касается переменной, когда вы просто нажимаете ENTER):
for /f "tokens=1,* delims=:" %%a in (test.txt) do (
set "folder=%%b"
set /p "folder=%%a (ENTER for default [%%b]) : "
)
echo "%folder%"
Примечание: в начале %folder%
, Легко избежать, когда вы удаляете пространство из test.txt
:
Path to your sandboxes folder:C:\Whatever\Path\Sandboxes
Если в сказал test.txt
первая строка содержит только путь по умолчанию, вы можете использовать это:
SET /P _path=<test.txt
SET /P _path=%_path%
Это самый быстрый способ добиться этого, но он работает только с 1-й строкой ( подробнее).
Если это, например, в 3-й строке, используйте это:
FOR /F "skip=2 delims=" %%G IN ("C:\adjust\path\test.txt") DO (SET "_path=%%G" & GOTO break)
:break
SET /P _path=%_path%
Для изменения 5-й строки skip=2
в skip=4
для 17-й строки skip=16
; в основном, если путь соответствует n
ты хочешь пропустить n-1
линий.
Вы также можете использовать FINDSTR
, но это не нужно, если местоположение пути в test.txt
известен.