批量使用字符串作为活动控制台命令

Batch use a string as an active console command

我的麻烦是从 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 读入一个变量,但我该如何从那里开始呢?我如何将这个字符串变量的字符输入控制台?

通过将其与 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));

如果说test.txt第一行只包含默认路径,你可以这样使用:

SET /P _path=<test.txt
SET /P _path=%_path%

这是最快的方法,但它只适用于第一行 (read more)。


如果是在第三行使用这个:

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中的路径位置就没有必要。

纯批处理不可能,但您可以使用默认值(因为 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%开头有一个space。很容易避免,当您从 test.txt:

中删除 space
Path to your sandboxes folder:C:\Whatever\Path\Sandboxes