批量使用字符串作为活动控制台命令
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
我的麻烦是从 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
:
Path to your sandboxes folder:C:\Whatever\Path\Sandboxes