是否可以迭代目录中的所有文件并为每个文件分配一个编号并等待 cmd 脚本中的输入

Is it possable to iterate all files in a directory and have assign a number to each file and wait for input in cmd script

我正在尝试使用批处理脚本自动执行流程。我想迭代具有特定文件扩展名 (.gho) 的特定目录中的所有文件并对其进行处理。

我知道我可以使用“dir /B *.gho”获取文件名,但我希望 cmd 列出每个文件名和一个数字并等待输入,然后将文件名传递给一个变量,这样它可以与包含要执行的命令的另一个变量组合。

示例:

  1. WinXP.gho
  2. Win7.gho
  3. Win10.gho

您想使用什么图片?

我知道我可以在 VB.net 中编写类似的内容,但这将用于 PE 启动盘,据我所知,.net 应用程序在没有一些工作的情况下无法在 PE 中运行。 有人能给我指出正确的方向吗,一旦我知道它可以完成以及要寻找什么,我可能可以自己弄清楚其余的。

提前致谢。

假设 findstr.exe 驻留在您的 PE 库 %SystemRoot%\System32 中,并且此脚本所在的当前工作目录 运行 包含您的目标 .gho 文件,这里是您可以使用的示例模板:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "ext=.gho"
For /F "Delims==" %%G In ('"(Set #) 2> NUL"') Do Set "%%G="
For /F "Tokens=1* Delims=:" %%G In ('Dir /B /A:-D "*%ext%" 2^> NUL ^| ^
 %SystemRoot%\System32\findstr.exe /E /I /L /N "%ext%"'
) Do Set "#%%G=%%H" & Echo( %%G.    %%H
If Not Defined #1 (Echo No file matches, press a key to exit.
    Pause 1> NUL & GoTo :EOF)
:Opt
Set "opt="
Echo(
Set /P "opt=Enter the number for your chosen file>"
Set "opt=%opt:"=%"
Set # | %SystemRoot%\System32\findstr.exe /B /L "#%opt%=" 1> NUL || GoTo Opt
SetLocal EnableDelayedExpansion
For %%G In ("!#%opt%!") Do EndLocal & Set "opt=%%G"
Echo(
Echo( You Selected %opt%
Pause

由于这是一个模板,第 3 行的扩展名可以根据需要替换为任何其他扩展名。您自己的代码将从第 18 行开始编写(替换我包含的三个示例行只是为了向您展示结果,现在分配给 %opt%。这两行之间的任何其他内容都不应修改。