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

[文本处理] 批处理获取文件列表

工作中碰到这样的问题:
要获取某个文件夹下的所有文件列表,包括子目录下的,但不包括目录,只要文件,文件列表中包含文件的相对路径,相对路径前填充"..\..\..\
举个例子,有个 data文件夹,里面有很多文件,子文件夹,
文件树如下:

我要所有文件目录的txt,我的操作过程如下:
进入data文件夹,shift+右键,在此处打开命令窗口。
输入:dir /s/b /a:-d > list.txt
会在data下生成 list.txt,里面会有很多带绝对路径的文件,生成的list文件也会有1行,这个当然不要了,选中删除
步骤1打开list.txt,把路径中C:\Users\aqh\Desktop\work\替换为"../../../
这样就把文件绝对路径改为了类似"../../../Data\libcurl.dll的相对路径
步骤2要在每行尾加上"
正则表达勾选,替换$为"
步骤3替换\为/
步骤4注意看最后一行有没有多余的"
有的话删掉,过程结束。
dir /s/b /a:-d > list.txt生成的原始list.txt如下
C:\Users\token\Desktop\work\Data\libcurl.dll
C:\Users\token\Desktop\work\Data\node.dll
C:\Users\token\Desktop\work\Data\list.txt
C:\Users\token\Desktop\work\Data\exe\font\fontawesome-webfont.ttf
C:\Users\token\Desktop\work\Data\log\20230325222256.log
C:\Users\token\Desktop\work\Data\log\20230325222315.log
我修改好的list.txt如下
"../../../Data/libcurl.dll"
"../../../Data/node.dll"
"../../../Data/exe/font/fontawesome-webfont.ttf"
"../../../Data/log/20230325222256.log"
"../../../Data/log/20230325222315.log"
测试用的data文件夹见附件,请问下大佬们有没有办法把这些都弄成批处理啊,
比如今天我要data文件夹的,明天可能会要其他位置的doo文件夹,有没有可能做一个bat文件,我拷贝到要list的文件夹运行即可
测试数据链接:https://wwi.lanzoup.com/iPRYJ10k47be

回复 1# 爱琴海不会走


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%i in ('dir /b /s /a-d ^| find /i /v "%~f0"') do (
  5.     set "OldStr=%%i"
  6.     set NewStr=!OldStr:%~dp0=../../../!
  7.     set NewStr=!NewStr:\=/!
  8.     echo "!NewStr!"
  9. ))>"%temp%\list.txt"
  10. move "%temp%\list.txt" .
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    谢谢老哥,好像差一点,用你的生成的是
"../../../log/20230325222256.log"
"../../../log/20230325222315.log"
相对路径还需要有data,是
"../../../data/log/20230325222256.log"
"../../../data/log/20230325222315.log"

TOP

回复 3# 爱琴海不会走
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%i in ('dir /b /s /a-d ^| find /i /v "%~f0"') do (
  5.     set "OldStr=%%i"
  6.     for %%a in ("%~f0\..") do (
  7.         set NewStr=!OldStr:%~dp0=../../../%%~nxa/!
  8.         set NewStr=!NewStr:\=/!
  9.         echo "!NewStr!"
  10.     )
  11. ))>"%temp%\list.txt"
  12. move "%temp%\list.txt" .
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

太感谢了,灰常感谢:victory:

TOP

返回列表