列出子目录中的文件并仅使用Windows命令行获取相对路径


4

我想使用Windows命令行列出带路径的文件。

例如:

~\folder1
  \1.jpg
  \2.jpg
~\folder2
  \01.jpg
  \02.jpg

我希望输出类似于相对路径而不是完整路径:

.\folder1\1.jpg
.\foler1\2.jpg

我用的时候 DIR /S /B *.jpg > list.txt 列出了完整的路径 C:\download\folder\folder1\1.jpg,我只需要它列出相对路径就好 .\folder1\1.jpg...

使用Linux命令行 find ./ -iname *.jpg > list.txt,给我预期的结果,但我需要一个解决方案,这将与Windows一样工作。

Answers:


1

使用Windows命令行列出具有子目录的文件

我想输出:。\ folder1 \ 1.jpg,。\ foler1 \ 2.jpg ....

我知道我们是否使用dir / s / b * .jpg> list.txt会得到一些东西   喜欢C:\ download \ folder \ folder1 \ 1.jpg,我不想那样,我只是   需要。\ folder1 \ 1.jpg

变量澄清(下)

  • 下面的逻辑是什么 FOR %X IN ("folder1","Folder2") 要么 SET Folders=("Folder1","Folder2","Folder3","Folder4") 你会把你的 "Folder1""Folder2",等等与双倍 要查找和列出的每个文件夹名称的引号和逗号 该 ./Foldername/file.jpg 到你要追加echo的文件 输出。
  • 为了 命令行复制示例 ,你会想做一个 CD /D C:\Path 到父目录所在的子文件夹所在的位置 .JPG 文件存在,因为该逻辑是隐式的,假设您在父目录中查找这些子子文件夹及其包含的文件类型/扩展名。
  • 对于其他示例,您只需插入包含所有子子文件夹的父目录 .JPG 文件存在于 SET ParentDir= 价值和一切应该按预期工作。
  • 其他变量是 SET 应该是自我解释我假设因为它们的名字非常接近它们的意思但是如果你需要进一步说明,请告诉我。

命令行复制示例

FOR %X IN ("folder1","Folder2") DO FOR /F "TOKENS=*" %F IN ('DIR /B /A-D ".\%~X\*.jpg"') DO ECHO .\%~X\%~F>>C:\Path\Log.txt

设置变量命令行复制示例

(使用以下设置文件夹名称和文件扩展名 DIR 命令。还插入父目录完整路径,其中要以该格式附加到文本文件的子文件夹位于。)

SET FileType=*.jpg
SET ParentDir=C:\Users\Name\Desktop
SET Folders=("Folder1","Folder2","Folder3","Folder4")
SET LogFile=C:\Path\LogFile.txt

CD /D "%ParentDir%"
FOR %X IN %Folders% DO FOR /F "TOKENS=*" %F IN ('DIR /B /A-D ".\%~X\%FileType%"') DO ECHO .\%~X\%~F>>"%LogFile%"

设置变量的批处理脚本示例

@ECHO ON
SET FileType=*.jpg
SET ParentDir=C:\Users\Name\Desktop
SET Folders=("Folder1","Folder2","Folder3","Folder4")
SET LogFile=C:\Path\LogFile.txt

CD /D "%ParentDir%"
FOR %%X IN %Folders% DO FOR /F "TOKENS=*" %%F IN (

    'DIR /B /A-D ".\%%~X\%FileType%"'

) DO ECHO .\%%~X\%%~F>>"%LogFile%"
GOTO EOF

进一步阅读和资源


非常感谢你的回复,我现在就试试,
erinmon

这种方法的一个很大的缺点是要考虑的子目录列表是硬编码的。这里有一个更好的方法: stackoverflow.com/a/12209020/2019892
Kevin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.