标题: [文本处理] 批处理获取文件名并追加到list.txt列表的第二列,请高手们修改一下,谢谢! [打印本页]
作者: WBATW 时间: 2024-4-4 02:28 标题: 批处理获取文件名并追加到list.txt列表的第二列,请高手们修改一下,谢谢!
运行下面代码的效果只有第三行正确:
A1.pdf
F3.pdf
G1.pdf=图.pdf
=屋.pdf
=面.pdf
我要实现的目标效果是:
A1.pdf=屋.pdf
F3.pdf=面.pdf
G1.pdf=图.pdf
A1.pdf、F3.pdf、G1.pdf文件名已经在list.log列表中作为第一列;提取屋.pdf、面.pdf、图.pdf是新
文件名作为第二列。list.log和新文件及bat都在当前目录下。修改下列代码以实现“旧文件名=新
文件名”追加写入到list.log列表中。- @echo off
- setlocal enabledelayedexpansion
- :: 第二次提取文件名并追加到list.log,与第一次提取的文件名对应成列格式
- set count=1
- for %%f in (*.pdf) do (
- if !count! equ 1 (
- set "secondFile=%%~nxf"
- echo, "%%f"
- echo !firstFile!=!secondFile!>>list.log
- )
- set /a !count!+=1
- )
- echo 文件名已追加到list.log
- endlocal
- pause
复制代码
作者: ShowCode 时间: 2024-4-4 11:30
回复 1# WBATW - @echo off
- cd /d "%~dp0"
- set "InFile=list.log"
- set "OutFile=list.log.new"
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('dir /b /a-d "*.pdf"') do (
- set /p str=
- echo !str!=%%i
- ))<"%InFile%" >"%OutFile%"
- move /y "%OutFile%" "%InFile%"
- pause
复制代码
作者: WBATW 时间: 2024-4-4 17:06
回复 2# ShowCode
作者: WBATW 时间: 2024-4-4 19:48
[i=s] 本帖最后由 WBATW 于 2024-4-4 19:52 编辑 [/i]
[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=279708&ptid=68774]3#[/url] [i]WBATW[/i] [/b]
作者: WBATW 时间: 2024-4-4 19:48
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:01
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:01
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:01
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:01
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:01
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:01
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:08
回复 3# WBATW
作者: WBATW 时间: 2024-4-4 20:09
回复 3# WBATW
谢谢你的回复,代码实现了如题效果。
我在问题中示例的是pdf一个类型的文件,但是,实际上可能有多个类型如*.doc、*.jpg、*.exls等等,这种情况下需要排除掉list.log文件列表和bat脚本本身。
作者: ShowCode 时间: 2024-4-4 20:32
回复 13# WBATW - @echo off
- cd /d "%~dp0"
- set "InFile=list.log"
- set "OutFile=%temp%\list.log.new"
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('dir /b /a-d ^| findstr /v /c:"%InFile%" /c:"%0"') do (
- set /p str=
- echo !str!=%%i
- ))<"%InFile%" >"%OutFile%"
- move /y "%OutFile%" "%InFile%" >nul
- pause
复制代码
作者: WBATW 时间: 2024-4-5 15:05
本帖最后由 WBATW 于 2024-4-5 15:08 编辑
回复 14# ShowCode
到第六行后添加pause暂停,停不了,闪退。将变量引用的%改为(应该改为)“!”,同样也是闪退。请大师检查一下看看问题出哪里了,谢目录下谢!(我将list.log文件也放进了%temp%目录下)。
作者: Batcher 时间: 2024-4-5 15:23
回复 15# WBATW
建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。
如果你在执行.bat脚本,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 77七 时间: 2024-4-5 17:16
回复 15# WBATW
把代码第六行的 %0 改为 %~nx0 试试
作者: ShowCode 时间: 2024-4-7 15:13
回复 15# WBATW
1、list.log文件不要放进%temp%目录下,14楼的代码是要求list.log和bat文件在同一个目录下。
2、把@echo off删掉,再每一行下面都加上pause,看看是到哪一步出错的,报错信息是什么。
作者: WBATW 时间: 2024-4-11 00:32
本帖最后由 WBATW 于 2024-4-11 00:34 编辑
回复 18# ShowCode
谢谢提示!
我是看到set "OutFile=%temp%\list.log.new"这里寻思着可能是路径上的问题,所有就把它放进了%temp%,结果是歪打正着,蒙对了 ,它可以就出现在第六行了。现在,修改 %0 改为 %~nx0 就正常了(你前面提示 的)。这几天没空下来,没及时回你,抱歉!再次感谢你的智慧!
作者: WBATW 时间: 2024-4-11 00:37
回复 15# WBATW
看了你提示的网址内容,很好!感谢版主指导!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |