列出具有特定扩展名的目录和文件数,构建特定菜单
List Directory and number of files with specific extension, build a specific menu
我正在尝试创建一个带有子菜单的菜单,其不带扩展名的名称来自目录。但是,我无法将变量作为数字进行选择。此代码无论如何都不起作用。我还想在菜单中每个文件名的开头显示一个数字;事实上,文件的数量也将是用户选择作为输入的数量之一。我无法克服这个问题。
@echo off
cd C:\Users\Murray\Documents\ConfigFiles\
for /f %%A in ('dir /a-d-s-h /b *conf ^| find /v /c ""') do set count=%%A
echo File count = %count%
for %%F in ("C:\Users\Murray\Documents\ConfigFiles\*.conf") do echo %%~nxF
set choice=
set /C /N="Please choice: "
if "%choice%" == "%count%" goto SUBMENU
if NOT EXIST "C:\Users\Murray\Documents\ConfigFiles\%choice%" goto NOFILE
:SUBMENU
Echo You are here
goto end
:NOFILE
echo %choice% could not be found.
goto END
:end
我们将不胜感激。
Batch 的限制是对这个问题的低于标准的更正的原因。
这是我能在几秒钟内做出的最好的结果:
@echo off
:one
cls
cd C:\Users\Murray\Documents\ConfigFiles\
for %%F in ("C:\Users\Murray\Documents\ConfigFiles\*.conf") do echo %%~nxF
echo.
echo Enter Configuration Name:
set/p "prompt=>"
if exist %prompt%.txt goto :two
if exist %prompt% goto :two
cls
echo File not found
pause >NUL
goto :one
:two
cls
REM When file is found, this code will run
pause >NUL
除非使用 /p
开关指定,否则 set
命令不会提示用户输入。为了使您的代码更友好,我还建议在代码的前面提示输入文件路径。
编辑:一些替代解决方案:将 choice
命令提示的第 9 个选项声明为“第二页”或“更多”选项。对于拥有数十或数百个文件的目录中的用户来说,这确实是一种痛苦。其他;您可以为每个与您的准查询匹配的文件分配一个整数,并在屏幕上的每个文件名之前 echo
它们,然后允许用户输入该数字以获取该文件。这似乎相当有效,如果您想探索其中一个或两个替代方案,我可以提供帮助(如果您需要)。
这是 中吹捧的方法的一个简单示例。它将在屏幕上打印一个数字,后跟每个匹配文件扩展名的文件的名称,因此将允许大量匹配文件,(尽管最终用户可能必须滚动一长串).选择文件后,您的最终用户只需键入相应的编号即可。代码不应超出输入请求,直到 ENTERed ENTERed.
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "src=C:\Users\Murray\Documents\ConfigFiles"
Set "ext=.config"
If Not Exist "%src%\*%ext%" Echo No file matches.& GoTo End
For /F "Delims==" %%G In ('"(Set #) 2>NUL"') Do Set "%%G="
For /F "Delims==" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe OS Call /? ^|
%SystemRoot%\System32\find.exe "=="') Do Set "HT=%%G"
For /F "Tokens=1* Delims=:" %%G In ('Dir /B /A:-D "%src%\*%ext%" 2^>NUL ^|
%SystemRoot%\System32\findstr.exe /E /I /L /N "%ext%"'
) Do Set "#%%G=%%H" & Echo( %%G.%HT:~-1%%%H
If Not Defined #1 Echo No file matches.& GoTo End
:Opt
Echo(
Set "HT=" & Set "opt="
Set /P "opt=Enter the number for your chosen file>"
If Not Defined opt (GoTo Opt) Else 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"
@Rem Your code goes below here
Echo(& Echo You Selected %opt%
@Rem Your code ends above here
:End
Setlocal EnableDelayedExpansion & For /F "Tokens=1,2" %%G In ("!CMDCMDLINE!"
) Do Endlocal & If /I "%%~nG" == "cmd" If /I "%%~H" == "/c" Echo(& Echo Press^
any key to exit.&Pause 1>NUL
如有必要,您只需修改第 4
和 5
行的变量值,以便对其进行测试。我不会支持超出此范围的更改或添加。测试完代码后,您可以在行 25
和 29
之间插入代码,替换我留在那里供您测试的示例行。
我正在尝试创建一个带有子菜单的菜单,其不带扩展名的名称来自目录。但是,我无法将变量作为数字进行选择。此代码无论如何都不起作用。我还想在菜单中每个文件名的开头显示一个数字;事实上,文件的数量也将是用户选择作为输入的数量之一。我无法克服这个问题。
@echo off
cd C:\Users\Murray\Documents\ConfigFiles\
for /f %%A in ('dir /a-d-s-h /b *conf ^| find /v /c ""') do set count=%%A
echo File count = %count%
for %%F in ("C:\Users\Murray\Documents\ConfigFiles\*.conf") do echo %%~nxF
set choice=
set /C /N="Please choice: "
if "%choice%" == "%count%" goto SUBMENU
if NOT EXIST "C:\Users\Murray\Documents\ConfigFiles\%choice%" goto NOFILE
:SUBMENU
Echo You are here
goto end
:NOFILE
echo %choice% could not be found.
goto END
:end
我们将不胜感激。
Batch 的限制是对这个问题的低于标准的更正的原因。 这是我能在几秒钟内做出的最好的结果:
@echo off
:one
cls
cd C:\Users\Murray\Documents\ConfigFiles\
for %%F in ("C:\Users\Murray\Documents\ConfigFiles\*.conf") do echo %%~nxF
echo.
echo Enter Configuration Name:
set/p "prompt=>"
if exist %prompt%.txt goto :two
if exist %prompt% goto :two
cls
echo File not found
pause >NUL
goto :one
:two
cls
REM When file is found, this code will run
pause >NUL
除非使用 /p
开关指定,否则 set
命令不会提示用户输入。为了使您的代码更友好,我还建议在代码的前面提示输入文件路径。
编辑:一些替代解决方案:将 choice
命令提示的第 9 个选项声明为“第二页”或“更多”选项。对于拥有数十或数百个文件的目录中的用户来说,这确实是一种痛苦。其他;您可以为每个与您的准查询匹配的文件分配一个整数,并在屏幕上的每个文件名之前 echo
它们,然后允许用户输入该数字以获取该文件。这似乎相当有效,如果您想探索其中一个或两个替代方案,我可以提供帮助(如果您需要)。
这是
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "src=C:\Users\Murray\Documents\ConfigFiles"
Set "ext=.config"
If Not Exist "%src%\*%ext%" Echo No file matches.& GoTo End
For /F "Delims==" %%G In ('"(Set #) 2>NUL"') Do Set "%%G="
For /F "Delims==" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe OS Call /? ^|
%SystemRoot%\System32\find.exe "=="') Do Set "HT=%%G"
For /F "Tokens=1* Delims=:" %%G In ('Dir /B /A:-D "%src%\*%ext%" 2^>NUL ^|
%SystemRoot%\System32\findstr.exe /E /I /L /N "%ext%"'
) Do Set "#%%G=%%H" & Echo( %%G.%HT:~-1%%%H
If Not Defined #1 Echo No file matches.& GoTo End
:Opt
Echo(
Set "HT=" & Set "opt="
Set /P "opt=Enter the number for your chosen file>"
If Not Defined opt (GoTo Opt) Else 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"
@Rem Your code goes below here
Echo(& Echo You Selected %opt%
@Rem Your code ends above here
:End
Setlocal EnableDelayedExpansion & For /F "Tokens=1,2" %%G In ("!CMDCMDLINE!"
) Do Endlocal & If /I "%%~nG" == "cmd" If /I "%%~H" == "/c" Echo(& Echo Press^
any key to exit.&Pause 1>NUL
如有必要,您只需修改第 4
和 5
行的变量值,以便对其进行测试。我不会支持超出此范围的更改或添加。测试完代码后,您可以在行 25
和 29
之间插入代码,替换我留在那里供您测试的示例行。