我想列出目录结构中具有特定扩展名的所有文件的所有文件名,并将其写入文件。我已达到以下目的:
dir /B /S *.ext > list.filenames
这给了我一个我想要包含在列表中的所有文件的列表。但它列出了带有绝对路径的文件,包括驱动器号和完整路径。我需要的是没有驱动器号的相对路径和工作目录的路径。
我想了两种可能性但没有找到解决方案:
- 告诉 dir 仅打印相对路径
- 从创建的文件中去除路径中不需要的部分。
我无法实现这两项目标。有什么想法吗?
答案1
这是一个调用 Powershell 的解决方案,尽管可能还有其他更好的方法:
dir /B /S *.ext > abs.filenames
set search='%cd%\'
powershell -Command "(gc abs.filenames) -replace [regex]::escape(%search%), '' " 2>&1 > list.filenames
type list.filenames
注意Windows Powershell可能不可用,因为它是“应用程序和功能”下的可选功能之一。
适用于 Linux 的 Windows 子系统或者赛格威在 Windows 上,您可以使用很多更好的工具来完成此任务,例如使用 find:
find . -name \*.ext > list.filenames
答案2
您可以尝试以下操作:
打开 PowerShell:
Win+ R>> 输入 powershell>> Ctrl+ Shift+Enter
然后使用这些代码:
$path="path\to\folder"
(Get-ChildItem -Path $path -File -Filter "*.ext" -Force -Recurse).FullName | %{$_.Replace($path)}
请记住用实际路径替换 path\to\folder,即使路径不包含空格也需要引号,并用实际扩展名替换 .ext。
它应该能给你你想要的东西。
答案3
您可以使用您的dir /b /s
命令For /F
循环执行此操作已经删除
使用D:\tokens^=2*delims^=\
和@echo= .\ + %~J
for /f tokens^=2*delims^=\ %i in ('dir/b/s D:\Folder\*.eXt')do @echo= .\%~j >>file.txt
- 结果:
.\File_01.eXt
.\File_02.eXt
.\Sub_Folder_1\File_03.eXt
.\Sub_Folder_1\File_04.eXt
或者继续\Folder...
使用tokens^=1*
echo= .\ + %~j
for /f tokens^=1*delims^=\ %i in ('dir/b/s D:\Folder\*.eXt')do @echo= .\%~j >>file.txt
- 结果:
.\Folder\File_01.eXt
.\Folder\File_02.eXt
.\Folder\Sub_Folder_1\File_03.eXt
.\Folder\Sub_Folder_1\File_04.eXt
- 您还可以隐藏/删除
.\
@echo .\
必要时可通过命令
- 对于 PowerShell,您可以执行相同的操作:
ls *.eXt -re|% {$_.FullName.Split(":").Get(1)}|Out-File -FilePath .\Files_eXt.txt
或者,还可以添加"."
:
ls *.eXt -re|%{$_str='.'+($_.FullName.Split(":").Get(1));$_str}>.\Files_eXt.txt