命令提示符“dir / b / s> file.txt”需要从结果中删除目录

时间:2011-06-01 18:41:09

标签: command prompt

我使用以下命令从目录递归转储完整的文件列表。

dir / b / s c:\ myfolder> C:\ mylist.txt

这样可以正常工作,但它也会显示完整路径的结果,因为我在结果上使用正则表达式,我需要它们只显示文件名。

任何想法?

6 个答案:

答案 0 :(得分:5)

有点老问题,但是如果有人偶然发现这个希望得到答案的话,也许这会帮助他们。

从Windows命令行(CMD.exe)运行此命令,使用:

setlocal enabledelayedexpansion    
for /f "delims=" %a in ('dir /b /s c:\myfolder"') do (@echo %~nxa >>c:\mylist.txt)
endlocal

从Windows .BAT脚本运行此命令:

setlocal enabledelayedexpansion    
for /f "delims=" %%a in ('dir /b /s c:\myfolder"') do (@echo %%~nxa >>c:\mylist.txt)
endlocal

输出可能看起来像这样,具体取决于您运行代码的文件夹中的文件:

file1.fil
file2.fil
file3.fil

了解代码的作用

  

for / f

  • 表示在这种情况下使用dir /b /s命令运行文件循环,以帮助从目录(文件夹)和子目录(子文件夹)中获取这些文件名。如问题中所述,这将为您提供文件的完整路径。因此,您将获得C:\ folder \ file.txt。
  • 而不是file.txt
  

“delims =”

  • 在这种情况下告诉for循环它想要变量%a或%% a 每个循环只有1个文件夹路径和文件名。
  

%a(CMD.exe)%% a(.BAT)

  • 如上所述是随每个循环而变化的变量。所以 每次命令dir /b /s找到一个新的文件名变量 %% a更改文件名。
  • 例如: 循环1:%% a = c:\ folder \ file1.fil 循环2:%% a = c:\ folder \ file2.fil
  

dir / b / s

  • 是打印目录(文件夹)文件的命令。通过 使用/b/s提问者正在添加其他条件。 命令dir不仅打印出文件和目录 (文件夹)在该目录(文件夹)中还有一些额外的 有关目录的信息。

    • /b告诉命令dir它不想要额外的 信息..只是文件名。
    • /s告诉命令dir包含所有文件和 该文件夹中的子目录(子文件夹)。
  

  • 是循环的一部分,用于说明在该特定过程中要做什么 环。所以在这种情况下,每个循环只执行一个命令 (@echo %%~nxa >>c:\mylist.txt)
  

@echo

  • 是一个简单的命令,可以打印出你想要的任何内容 计算机屏幕或在本例中使用@echo %%~nxa >>c:\mylist.txt
  • 到txt文件
  • c:\ mylist.txt之前的>>尤为重要。每一次 循环发生它在txt文件中开始一个新行并写入 变量到那一行。如果只指定了一个>,它将覆盖 每次循环发生时txt文件中的行。哪个会 打败了这个脚本的目的。
  

%~nxa(CMD.exe)%% ~nxa(.BAT)

  • 是上面提到的变量%% a,除了它被解析(编辑) 提问者@ fightstarr20要求的方式。代替 将变量打印为C:\ myfolder \ myfile.fil变量 将打印为myfile.fil
  • ~中的%%~nxa告诉程序您要修改变量 %%一个。在这种情况下,请添加nx
  • n中的%%~nxa告诉程序要修改变量%% a by 从变量中排除路径。

    • 例如

           -variable %%a = C:\folder\filename.fil 
           -variable %%~na = filename. 
      

      - 如果您注意到它将文件名留下扩展名.fil。

  • x中的%%~nxa告诉程序要修改变量%% a 通过从变量中排除路径和文件名,所以你得到的只是文件名的扩展名。

    • 例如

           -variable %%a = C:\folder\filename.fil
           -variable %%~xa = .fil
      
  • 所以如果你将两个修饰符nx组合到变量%% a 您将获得包含扩展名的完整文件名。

    • 示例:

           -variable %%a = c:\folder\filename.fil
           -variable %%~nxa = filename.fil
      
  

setlocal enabledelayedexpansion

  • 简单解释是之前需要在脚本中的命令 for循环以允许变量%% a被修改或“扩展”。
  

ENDLOCAL

  • 这会关闭setlocal enabledelayedexpansion命令

要获得有关CMD命令的非常有用的解释和参考,我建议您阅读ss64.com以及获得CMD答案的绝佳论坛我建议dostips.com

答案 1 :(得分:2)

更改正则表达式以从整个路径获取文件名。

如果您可以使用PowerShell,请查看Get-ChildItem。您可以使用它拥有更强大的选项。

答案 2 :(得分:2)

像这样使用

dir /b /s C:\myfolder>C:\temp.txt
echo exit>>C:\temp.txt
goto loop

:loop
set /p _x=<temp.txt
findstr /v /c:"%_x%" temp.txt>temp2.txt
type temp2.txt>temp.txt
set _x=%_x:*\=%
echo %_x%>file.txt
if "%_x%" == "exit" (
del temp.txt
del temp2.txt
exit
)
goto loop

如果您愿意,可以使用for而不是goto,但它基本相同。 抱歉最后一个......

答案 3 :(得分:0)

我知道我有点晚了,但是没有人说要带走/ s

dir /b c:\myfolder > c:\mylist.txt

应该这样做。

答案 4 :(得分:0)

这肯定会奏效,因为它对我有用。

dir D :(文件路径)/ s / b&gt; d:\ filelist.txt

答案 5 :(得分:0)

您可以使用此代码:

dir /b > A_fileslist.txt

在记事本编辑器中复制并保存为“Fileslist.bat”。