Board logo

标题: [文本处理] 批处理获取文件列表 [打印本页]

作者: 爱琴海不会走    时间: 2023-6-27 15:26     标题: 批处理获取文件列表

工作中碰到这样的问题:
要获取某个文件夹下的所有文件列表,包括子目录下的,但不包括目录,只要文件,文件列表中包含文件的相对路径,相对路径前填充"..\..\..\
举个例子,有个 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
作者: Batcher    时间: 2023-6-27 16:38

回复 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" .
复制代码

作者: 爱琴海不会走    时间: 2023-6-27 16:48

回复 2# Batcher


    谢谢老哥,好像差一点,用你的生成的是
"../../../log/20230325222256.log"
"../../../log/20230325222315.log"
相对路径还需要有data,是
"../../../data/log/20230325222256.log"
"../../../data/log/20230325222315.log"
作者: Batcher    时间: 2023-6-27 16:55

回复 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" .
复制代码

作者: 爱琴海不会走    时间: 2023-6-27 17:02

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2