Board logo

标题: [文本处理] 批处理获取文件名并追加到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列表中。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 第二次提取文件名并追加到list.log,与第一次提取的文件名对应成列格式
  4. set count=1
  5. for %%f in (*.pdf) do (
  6.     if !count! equ 1 (
  7.         set "secondFile=%%~nxf"
  8.         echo, "%%f"
  9.         echo !firstFile!=!secondFile!>>list.log
  10.     )
  11.         set /a !count!+=1
  12. )
  13. echo 文件名已追加到list.log
  14. endlocal
  15. pause
复制代码

作者: ShowCode    时间: 2024-4-4 11:30

回复 1# WBATW
  1. @echo off
  2. cd /d "%~dp0"
  3. set "InFile=list.log"
  4. set "OutFile=list.log.new"
  5. setlocal enabledelayedexpansion
  6. (for /f "delims=" %%i in ('dir /b /a-d "*.pdf"') do (
  7.     set /p str=
  8.     echo !str!=%%i
  9. ))<"%InFile%" >"%OutFile%"
  10. move /y "%OutFile%" "%InFile%"
  11. 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
  1. @echo off
  2. cd /d "%~dp0"
  3. set "InFile=list.log"
  4. set "OutFile=%temp%\list.log.new"
  5. setlocal enabledelayedexpansion
  6. (for /f "delims=" %%i in ('dir /b /a-d ^| findstr /v /c:"%InFile%" /c:"%0"') do (
  7.     set /p str=
  8.     echo !str!=%%i
  9. ))<"%InFile%" >"%OutFile%"
  10. move /y "%OutFile%" "%InFile%" >nul
  11. 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://bbs.bathome.net/) Powered by Discuz! 7.2