@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 文件),例如
find
、findstr
、fc
等,尤其是在处理少量数据时;改用if
命令。
- 使用
for %%a in (*.bat)...
而不是for /F %%a in ('dir /B *.bat')...
. 第二种方法需要执行 cmd.exe 并将其输出存储在文件中,然后for
命令才能处理其行。
- 避免使用管道并改用重定向。管道需要执行两个 cmd.exe 副本来处理管道每一侧的命令。
- 检查变量是否包含给定字符串的一种简单方法是尝试从变量中删除字符串:如果结果不同,则字符串存在于变量中:
if "!variable:%string%=!" neq "%variable%" echo The string is in the variable
。
- 以前的方法也可用于检查变量是否具有值列表中的任何一个:
set list=one two three
, if "!list:%variable%=!" neq "%list%" echo The variable have one value from the list
. 如果列表的值可能包含空格,则它们必须由另一个分隔符分隔。
编辑:添加新版本作为对新评论的回答
一次暂停一页的最简单方法是以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%
安东尼奥