Windows 命令 dir 列出具有绝对路径的文件,需要相对路径

Windows 命令 dir 列出具有绝对路径的文件,需要相对路径

我想列出目录结构中具有特定扩展名的所有文件的所有文件名,并将其写入文件。我已达到以下目的:

dir /B /S *.ext > list.filenames

这给了我一个我想要包含在列表中的所有文件的列表。但它列出了带有绝对路径的文件,包括驱动器号和完整路径。我需要的是没有驱动器号的相对路径和工作目录的路径。

我想了两种可能性但没有找到解决方案:

  1. 告诉 dir 仅打印相对路径
  2. 从创建的文件中去除路径中不需要的部分。

我无法实现这两项目标。有什么想法吗?

答案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

相关内容