Пакетное использование строки в качестве активной консольной команды

Моя проблема в том, чтобы прочитать строку из 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 известен.

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