gpt4 book ai didi

batch-file - 如何从 MS DOS 目录列表中排除特定文件名?

转载 作者:行者123 更新时间:2023-12-02 06:19:16 25 4
gpt4 key购买 nike

我正在创建一个 MS DOS 批处理脚本,它需要列出当前目录中的每个 .bat 文件,但不显示 autoexec.bat 或其他不应显示的实用程序或系统 .bat 文件由用户运行。

我目前有 DIR "*.bat"/B/P

这会适本地列出所有 .bat 文件,但它会显示 autoexec.bat。我如何将其从列表中排除?同样有点重要的是,我怎么能去掉文件扩展名并显示超过 7 个字符的 DOS 限制文件呢?

限制:我无法使用高于 WinME 的 DOS 版本。那是我正在使用的版本。

感谢您的帮助。

编辑:Internet 上有很多关于执行此操作的信息,但都是在 Windows 命令处理器中,不是MS DOS。请理解 DOS 和命令提示符不是一回事。

最佳答案

@echo off
setlocal EnableDelayedExpansion
rem Add more names separated with slashes here:
set exclude=/autoexec/
for %%a in (*.bat) do (
if "!exclude:/%%~Na/=!" equ "%exclude%" (
echo %%~Na
)
)

编辑:添加了一些解释

批处理文件处理速度很慢,因此您应该使用允许批处理文件运行得更快的技术。例如:

  • 尽量使用最少的行/命令来达到一定的效果。尽量避免使用外部命令(*.exe 文件),如 findfindstrfc 等,特别是当它们处理少量数据时;请改用 if 命令。
  • 使用 for %%a in (*.bat)... 而不是 for/F %%a in ('dir/B *.bat')...。第二种方法需要在 for 命令可以处理其行之前执行 cmd.exe 并将其输出存储在一个文件中。
  • 避免管道,改用重定向。管道需要执行两个 cmd.exe 副本来处理管道每一侧的命令。
  • 一种检查变量是否包含给定字符串的简单方法是尝试从变量中删除该字符串:如果结果不同,则该字符串存在于变量中:if "!变量:%string%=!"neq "%variable%"echo 字符串在变量中.
  • 以前的方法也可用于检查变量是否具有值列表中的任何一个:set list=one two three, if "!list:%variable%=!"neq "%list%"echo 变量有一个来自列表的值。如果列表的值可能有空格,则它们必须由另一个分隔符分隔。

编辑:添加新版本作为对新评论的回答

一次暂停一个页面的最简单方法是使用 more 过滤器:

theBatchFile | more

但是,程序必须重新排序输出以便在列中显示它。下面的新版本实现了这两个功能,因此不需要 more 过滤器;您只需设置每页所需的列数和行数。

@echo off
setlocal EnableDelayedExpansion
rem Add more names separated with slashes here:
set exclude=/autoexec/
rem Set the first two next variables as desired:
set /A columns=5, rows=41, wide=(80-columns)/columns, col=0, row=0
rem Create filling spaces to align columns
set spaces=
for /L %%a in (1,1,%wide%) do set spaces= !spaces!
set line=
for %%a in (*.bat) do (
if "!exclude:/%%~Na/=!" equ "%exclude%" (
rem If this column is less than the limit...
set /A col+=1
if !col! lss %columns% (
rem ... add it to current line
set name=%%~Na%spaces%
set "line=!line!!name:~0,%wide%! "
) else (
rem ... show current line and reset it
set name=%%~Na
echo !line!!name:~0,%wide%!
set line=
set /a col=0, row+=1
rem If this row is equal to the limit...
if !row! equ %rows% (
rem ...do a pause and reset row
pause
set row=0
)
)
)
)
rem Show last line, if any
if defined line echo %line%

安东尼奥

关于batch-file - 如何从 MS DOS 目录列表中排除特定文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com