找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20027|回复: 4

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

[复制链接]
发表于 2023-6-27 15:26:06 | 显示全部楼层 |阅读模式
工作中碰到这样的问题:
要获取某个文件夹下的所有文件列表,包括子目录下的,但不包括目录,只要文件,文件列表中包含文件的相对路径,相对路径前填充"..\..\..\
举个例子,有个 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
发表于 2023-6-27 16:38:55 | 显示全部楼层
回复 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:00 | 显示全部楼层
回复 2# Batcher


    谢谢老哥,好像差一点,用你的生成的是
"../../../log/20230325222256.log"
"../../../log/20230325222315.log"
相对路径还需要有data,是
"../../../data/log/20230325222256.log"
"../../../data/log/20230325222315.log"
发表于 2023-6-27 16:55:33 | 显示全部楼层
回复 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:35 | 显示全部楼层
太感谢了,灰常感谢:victory:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 17:02 , Processed in 0.018336 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表