现在的位置: 首页 > 综合 > 正文

输出第N个bat变量 (ALLyeSNO)

2013年08月22日 ⁄ 综合 ⁄ 共 1900字 ⁄ 字号 评论关闭

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 )

抱歉!评论已关闭.