Board logo

标题: [文本处理] [分享]批处理显示和选择文件序号不希望显示某些内容 [打印本页]

作者: Batcher    时间: 2021-11-6 20:06     标题: [分享]批处理显示和选择文件序号不希望显示某些内容

【问题描述】

批处理代码如下
  1. @echo off
  2. :begin
  3. set File_Index=0
  4. for /f "delims=" %%f in ('dir /b "%~dp0\files_test\"') do (
  5. for /f %%n in ('set/a File_Index+=1') do (
  6. for /f %%a in ("1") do (
  7. set File_Entry[%%n]=%%f )
  8. echo %%n---%%f )
  9. set/a File_Index+=1 )
  10. echo 一共%File_Index%个文件/文件夹
  11. echo -----------------------------
  12. echo.
  13. echo.                请输入选择文件的序号:
  14. set File_Index=
  15. set /p File_Index=
  16. for /f "delims=" %%p in ('set File_Entry[%File_Index%]') do (
  17. echo 选择了 %%p )
  18. pause>nul
  19. cls & goto begin
复制代码
                请输入选择文件的序号:
2
选择了 File_Entry[2]=1.txt
请按任意键继续. . .


我不想显示橙色方框里的东西,怎么做较为可靠?
作者: Batcher    时间: 2021-11-6 20:06

【解决方案】
  1. @echo off
  2. :begin
  3. set File_Index=0
  4. for /f "delims=" %%f in ('dir /b "%~dp0files_test\"') do (
  5.     for /f %%n in ('set /a File_Index+=1') do (
  6.         for /f %%a in ("1") do (
  7.             set File_Entry[%%n]=%%f
  8.         )
  9.         echo %%n---%%f
  10.     )
  11.     set /a File_Index+=1
  12. )
  13. echo 一共%File_Index%个文件/文件夹
  14. echo -----------------------------
  15. echo.
  16. echo.                请输入选择文件的序号:
  17. set File_Index=
  18. set /p File_Index=
  19. for /f "tokens=2 delims==" %%p in ('set File_Entry[%File_Index%]') do (
  20.     echo 选择了 %%p
  21. )
  22. pause
  23. cls
  24. goto :begin
复制代码

作者: Batcher    时间: 2021-11-6 20:09

进一步优化,省略第三层for循环:
  1. @echo off
  2. :begin
  3. set File_Index=0
  4. for /f "delims=" %%f in ('dir /b "%~dp0files_test\"') do (
  5.     for /f %%n in ('set /a File_Index+=1') do (
  6.         set File_Entry[%%n]=%%f
  7.         echo %%n---%%f
  8.     )
  9.     set /a File_Index+=1
  10. )
  11. echo 一共%File_Index%个文件/文件夹
  12. echo -----------------------------
  13. echo.
  14. echo.                请输入选择文件的序号:
  15. set File_Index=
  16. set /p File_Index=
  17. for /f "tokens=2 delims==" %%p in ('set File_Entry[%File_Index%]') do (
  18.     echo 选择了 %%p
  19. )
  20. pause
  21. cls
  22. goto :begin
复制代码

作者: Batcher    时间: 2021-11-6 22:41

【问题2】
这个方法如果遇到文件名是“=”开头的是不是显示不出来等号?

【代码2】
  1. @echo off
  2. :begin
  3. set File_Index=0
  4. for /f "delims=" %%f in ('dir /b "%~dp0files_test\"') do (
  5.     for /f %%n in ('set /a File_Index+=1') do (
  6.         set File_Entry[%%n]=%%f
  7.         echo %%n---%%f
  8.     )
  9.     set /a File_Index+=1
  10. )
  11. echo 一共%File_Index%个文件/文件夹
  12. echo -----------------------------
  13. echo.
  14. echo.                请输入选择文件的序号:
  15. set File_Index=
  16. set /p File_Index=
  17. for /f "tokens=1* delims==" %%p in ('set File_Entry[%File_Index%]') do (
  18.     echo 选择了 %%q
  19. )
  20. pause
  21. cls
  22. goto :begin
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2