如何使用当前目录名称而不是完整路径打印文件


2

dir /b /s

打印:
D:\stuff\tmp>dir /b /s D:\stuff\tmp\A.java D:\stuff\tmp\AAA D:\stuff\tmp\B.java D:\stuff\tmp\C.java D:\stuff\tmp\Why.class D:\stuff\tmp\Why.java D:\stuff\tmp\XX.class D:\stuff\tmp\XX.java D:\stuff\tmp\XX.txt D:\stuff\tmp\AAA\aaa.kkk

我需要打印:
D:\stuff\tmp>???? tmp\A.java tmp\AAA tmp\B.java tmp\C.java tmp\Why.class tmp\Why.java tmp\XX.class tmp\XX.java tmp\XX.txt tmp\AAA\aaa.kkk

我怎样才能做到这一点?


您要解决什么问题?
dsolimano

我找到了:TechNet DIR Command。我没有时间对其进行审查,但是它应该说明您是否可以这样做。
Dooley_labs

Answers:


0

如果将以下内容放在CMD文件中,这对我有用:

@echo off
SETLOCAL EnableDelayedExpansion
for /f "usebackq delims=" %%A in (`cmd /c dir /s /b`) DO (
  set NAME=%%A
  set SHORT=!NAME:%cd%\=!
  echo.!SHORT!
) 

它采用原始dir命令的输出,并使用字符串替换来删除当前目录。有关set /?更多信息,请参见。如果您希望将目录作为参数传递而不是使用当前目录,请尝试对变量进行以下修改:

@echo off
SETLOCAL EnableDelayedExpansion
for /f "usebackq delims=" %%A in (`cmd /c dir /s /b %1`) DO (
  set NAME=%%A
  set SHORT=!NAME:%~1\=!
  echo.!SHORT!
) 

当心文件名和目录在文件名中带有感叹号,因为使用此方法可能会去除它们。如果您需要更强大的功能来解决此问题,请考虑安装GNU sedgrep。如果您不介意以斜杠(而不是反斜杠)在UNIX风格中返回的文件名,并且在每个条目的前面都加了引号,则还可以使用GNU find命令进行调查./

还有另一个答案可能会给您一些有关在CMD处理中处理感叹号的想法:https : //stackoverflow.com/questions/32873578/how-to-read-a-string-with-from-a-file-in- Windows批处理脚本/ 32874195#32874195

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.