求批处理:读取所有文件名赋值给变量,并且变量循环执行一条命令

有需求将IIS的W3C格式日志转换成NCSA的COMBINE格式,需要用到convlog1.exe一个命令行小软件,具体命令格式如下:
convlog1.exe -i d:\logw3c\ex110309.log -o d:\logncsa\ex110309.log -l comb
但是每次只能处理一个文件,还不支持通配符,有一堆旧的日志需要转换,所以求批处理,我只有30分,只能给这么多了,如果还有分,我会全给的,拜谢!
呵呵,我刚回答了几个问题,赚了点小钱,提高下悬赏,我一会再去回答几个,赚到继续提高悬赏,解决这个问题对我来说真的非常重要,就拜托大家啦!

另外提个思路,日志是按照日期排列的,文明是ex年月日.log,比如ex110309.log,貌似也可以读取文件夹下的第一个文件名,然后递增,但是我不会写批处理,求写好的批处理,拜谢!

如果 命令行 可以这样写 就简单了:
convlog1.exe -i d:\logw3c\ex110309.log -o d:\logncsa\ -l comb
因为每行不一样的地方只有一处。
先在 d:\logw3c\ 下执行 tree /f > a.txt
然后用记事本打开 a.txt
显示:(类似这样)
Folder PATH listing
Volume serial number is 3B48-12F8
C:.
0001.log
0002.log
0003.log
0004.log
No subfolders exist
把两头没用的都删了 只留下中间有用的文件名。
然后查找替换: 把 四个空格 替换为 convlog1.exe -i d:\logw3c\ 就变成了
convlog1.exe -i d:\logw3c\0001.log
convlog1.exe -i d:\logw3c\0002.log
convlog1.exe -i d:\logw3c\0003.log
convlog1.exe -i d:\logw3c\0004.log

然后 再查找替换: 把 .log 替换为 .log -o d:\logncsa\ -l comb 就变成了

convlog1.exe -i d:\logw3c\0001.log -o d:\logncsa\ -l comb
convlog1.exe -i d:\logw3c\0002.log -o d:\logncsa\ -l comb
convlog1.exe -i d:\logw3c\0003.log -o d:\logncsa\ -l comb
convlog1.exe -i d:\logw3c\0004.log -o d:\logncsa\ -l comb
然后复制 粘贴到一个 cmd 框里面就能运行了。

如果 同一行里 必须指定两次文件名,那么还是写一个小的EXE处理一下吧。追问

不行,那个软件也是网上一个人写的,必须指定输出的目录+文件名。另外提个思路,日志是按照日期排列的,文明是ex年月日.log,比如ex110309.log,貌似也可以读取文件夹下的第一个文件名,然后递增,但是我不会写批处理,求写好的批处理,拜谢!

追答

我帮你写个EXE 吧,你匿名提问,我怎么给你发过去呢?

追问

[email protected],拜谢!

追答

给你发了, 先用 Tree /f 或者 dir /b > c:\a.txt 生成一个文本文件,再用这个EXe打开就行了。

不过 我发现 楼下是个高人,楼下的方法不错! 我看不懂 哈哈

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-09
@echo off
echo 正在运行中...
for /f "delims=" %%i in ('dir d:\logw3c\ex*.log /b') do convlog1.exe -i %%~si -o d:\logncsa\%%~nxi -l comb
echo 完成!&pause

运行有问题,请指出来!追问

大侠,我太爱你了!万分感谢,简直救了我命了

本回答被提问者采纳
相似回答