输出第N个bat变量 (ALLyeSNO)

71 篇文章 0 订阅
43 篇文章 0 订阅

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 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值