hhhhhk:
我在写一个批处理的时候,
for /r %PATH% %%k in (%FILETYPE%) do [cmd]
我现在要表示第3个%%k变量,要怎么样表示啊?
首先来看个例子
引用:
for /r %k in (*.exe) do @echo %k
I:\test>for /r %k in (*.exe) do @echo %k
I:\test\6.exe
I:\test\all\sadsad.exe
I:\test\bug\okok.exe
这个命令是用来遍历当前目录以及子目录 输出所有以exe为后缀的绝对路径
引用:
假如我们要输出第三个变量 也就是I:\test\bug\okok.exe 我们可以把信息暂时输入到临时文件 然后再进行提取
for /r %k in (*.exe) do @echo %k>>allyesno.tmp
然后提取
for /F "skip=2" %i IN (allyesno.tmp) DO @echo %i
由于
for /r %k in (*.exe) do @echo %k>>allyesno.tmp 的保存结果是以行来保存
所以我们用for /F "skip=2" %i IN (allyesno.tmp) DO @echo %i 的skip参数来进行跳跃行
跳跃2行以后 取第三行进行输出 就是我们想要的结果 输出第三个变量了
引用:
另外几个值得注意的问题
1 skip<=0的时候 程序会出错 所以必须加入容错参数
2 如果只是需要显示第三行,而不是三行以及后面的行数 程序无法使用tokens来过滤不需要显示的行
为什么呢?因为tokens只支持26个令牌 当输入结果大于 26个的时候 是不行的 事实上 用tokens也是颇麻烦
所以下面的程序中 用了另一种非常简单的方法
3 当需要输出的变量大于实际行数的时候 则输出结果为空 所以最好加入容错提示
4 记得检测allyesno.tmp这个临时文件 因为我们是用>>将检测结果输出到临时文件中 >>是追加
所以必须检查目录里面是不是已经 存在了allyesno.tmp的临时文件
5 %i与%%i 这个仔细看 windows的help就会知道 当我们在bat里面的写法是%%i而 命令行的写法就应该是%i
6 有可能出现的问题 由于大家可能会对注册表中cmd的环境变量改动 以至于造成bat运行不正常 解决的办法是
当进入cmd界面以后 再次运行cmd.exe加载默认的环境变量 这个方法我只在自己的机子上测试过 仅共参考
完整程序如下
引用:
@echo off
cls
rem 输出第N个bat变量 by allyesno 2005-3-25
set addskip=0
set count=0
if "%1"=="" echo plz type the filetype what you want to find&goto readme
if "%2"=="" echo plz type the variable number which you want to output&goto readme
if exist allyesno.tmp del allyesno.tmp>nul
for /r %%k in (*.%1) do @echo %%k>>allyesno.tmp
if not exist allyesno.tmp echo error i can't find anyfile&goto end
for /f %%k in (allyesno.tmp) do set /a count=count+1
if "%2"=="all" type allyesno.tmp&goto end
if %2 gtr %count% echo GOD!Variable number overflow!You got a shell????&goto end
if %2 equ 1 for /F %%k IN (allyesno.tmp) DO if %%k==%%k @echo %%k&goto end
if %2 leq 0 echo You make a joke!&goto end
set /a addskip=%2-1
for /F "skip=%addskip%" %%k IN (allyesno.tmp) DO if %%k==%%k @echo %%k&goto end
:readme
echo use: nv filetype variable number
echo use: nv filetype all
echo example: nv exe 3
echo example: nv exe all
:end
将上面代码保存为 nv.bat运行
example:nv exe 3 是查找所有exe的文件 并输出第三个变量结果
example: nv exe all 是查找所有exe的文件 并输出所有结果
ps:写这个程序的思路源至hhhhhk的提问