我想创建一个批处理文件,它将搜索目录中所有.sln文件的文件,然后将它们显示为列表,这样用户就可以从列表中选择他们想要的文件并打开该文件。不确定如何存储文件以使其成为列表。这就是我到目前为止所拥有的......
set TT_API_PATH=C:\dir
cd %TT_API_PATH%
dir /b /s *.sln
set cmd=dir /b /s *.sln
FOR /F %%i IN (' %cmd% ') DO SET X=%%i
答案 0 :(得分:3)
编辑:用call echo %%x] !choice[%%x]!
替换了不必要且危险的echo %%x] !choice[%%x]!
命令。甚至不确定为什么我把它包括在内。
忽略单独的:
行,由于某种原因,我的代码中的所有空行都会崩溃,并且必须在空行上放置一些内容以保留格式。遗憾。
@echo off
setlocal enabledelayedexpansion
set count=0
:
:: Read in files
for %%x in (*.sln) do (
set /a count=count+1
set choice[!count!]=%%x
)
:
echo.
echo Select one:
echo.
:
:: Print list of files
for /l %%x in (1,1,!count!) do (
echo %%x] !choice[%%x]!
)
echo.
:
:: Retrieve User input
set /p select=?
echo.
:
:: Print out selected filename
echo You chose !choice[%select%]!
编辑:更改了示例以包含所请求的子目录。
为了满足您在子目录中找到的sln文件的请求,我将for %%x in (*.sln)
更改为for /f %%x in ('dir /s /b *.sln')
执行dir /s /b *.sln
命令,该!choice[%%x]!
仅返回当前目录中找到的sln文件在当前目录中并返回结果。
为了使输出尽可能干净清晰,我还更改了从整个路径!choice[%%x]:%cd%\=!
列出文件时打印的内容到从当前目录%cd%
开始的相对路径(其中替换当前路径和目录(\
)加上反斜杠(@echo off
setlocal enabledelayedexpansion
set count=0
:
:: Read in files
for /f %%x in ('dir /s /b *.sln') do (
set /a count=count+1
set choice[!count!]=%%x
)
:
echo.
echo Select one:
echo.
:
:: Print list of files
for /l %%x in (1,1,!count!) do (
echo %%x] !choice[%%x]:%cd%\=!
)
echo.
:
:: Retrieve User input
set /p select=?
echo.
:
:: Print out selected filename
echo You chose !choice[%select%]!
),什么也没有。)
choice[#]
上面的代码只显示从当前目录到文件的相对路径,但保留变量for /f %%x...
内的完整路径。
如果您根本不想处理整个路径,可以添加一行到for /l %%x ...
循环,并恢复{中的回显线{1}}循环到(编辑过的)第一个示例中的代码,以便代码看起来像这样(解释更改所需的时间与显示整个代码一样长),所以:
@echo off
setlocal enabledelayedexpansion
set count=0
:
:: Read in files
for /f %%x in ('dir /s /b *.sln') do (
set /a count=count+1
set choice[!count!]=%%x
for %%y in (!count!) do set "choice[%%y]=!choice[%%y]:%cd%\=!"
)
:
echo.
echo Select one:
echo.
:
:: Print list of files
for /l %%x in (1,1,!count!) do (
echo %%x] !choice[%%x]!
)
echo.
:
:: Retrieve User input
set /p select=?
echo.
:
:: Print out selected filename
echo You chose !choice[%select%]!
编辑/恢复echo
语句并非严格必要,并且根本不会更改输出,但它是一个很好的编程实践,因为它只是识别出当前目录的路径最初读入文件名时,choice[#]
变量已被删除。更改它会消除不必要的复杂性,并在代码被更改或适应其他用途时删除可能出现的意外结果。如果单独留下该行,它将再次尝试用变量choice[#]
替换当前目录的所有实例。当它无法替换任何东西时,它只会保持字符串不变。