Term : FreeXploiT
Author : ALLyeSNO
Date : 2005-3-25
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的提问
附件 nv.rar ( 下载次数: 0 ) |