[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理获取文件名并追加到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
复制代码

回复 15# WBATW
看了你提示的网址内容,很好!感谢版主指导!
批处理我不会多嘛!

TOP

本帖最后由 WBATW 于 2024-4-11 00:34 编辑

回复 18# ShowCode
谢谢提示!
我是看到set "OutFile=%temp%\list.log.new"这里寻思着可能是路径上的问题,所有就把它放进了%temp%,结果是歪打正着,蒙对了 ,它可以就出现在第六行了。现在,修改 %0 改为 %~nx0 就正常了(你前面提示 的)。这几天没空下来,没及时回你,抱歉!再次感谢你的智慧!
批处理我不会多嘛!

TOP

回复 15# WBATW


1、list.log文件不要放进%temp%目录下,14楼的代码是要求list.log和bat文件在同一个目录下。
2、把@echo off删掉,再每一行下面都加上pause,看看是到哪一步出错的,报错信息是什么。
测试代码之前请做好备份

TOP

回复 15# WBATW


   把代码第六行的 %0 改为 %~nx0 试试
bat小白,请多指教!谢谢!

TOP

回复 15# WBATW


建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

如果你在执行.bat脚本,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 WBATW 于 2024-4-5 15:08 编辑

回复 14# ShowCode
到第六行后添加pause暂停,停不了,闪退。将变量引用的%改为(应该改为)“!”,同样也是闪退。请大师检查一下看看问题出哪里了,谢目录下谢!(我将list.log文件也放进了%temp%目录下)。
批处理我不会多嘛!

TOP

回复 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
复制代码
测试代码之前请做好备份

TOP

回复 3# WBATW

谢谢你的回复,代码实现了如题效果。
我在问题中示例的是pdf一个类型的文件,但是,实际上可能有多个类型如*.doc、*.jpg、*.exls等等,这种情况下需要排除掉list.log文件列表和bat脚本本身。
批处理我不会多嘛!

TOP

回复 3# WBATW
批处理我不会多嘛!

TOP

回复 3# WBATW
批处理我不会多嘛!

TOP

回复 3# WBATW
批处理我不会多嘛!

TOP

回复 3# WBATW
批处理我不会多嘛!

TOP

回复 3# WBATW
批处理我不会多嘛!

TOP

回复 3# WBATW
批处理我不会多嘛!

TOP

返回列表