从输出删除目录中的批处理文件

我有如下的批处理文件是输出文件ReadFile.txt从输出删除目录中的批处理文件

cd /d "T:\EMP\SST" 

for /r %%i in (T:\EMP\SST) do echo %%i >>D:\MultiThreading\ReadFile.txt

pause

这ReadFile.txt文件输出

T:\EMP\SST\T:\EMP\SST 

T:\EMP\SST\file 11\T:\EMP\SST

T:\EMP\SST\file 12\T:\EMP\SST

T:\EMP\SST\file 13\T:\EMP\SST

我想删除的目录ouptput T:\EMP\SST所以我想我的输出是这样的

file 11 

file 12

file 13

如何做到这一点

回答:

您以错误的方式使用FOR。圆括号之间的模式不是起始目录,它是要匹配的文件/目录模式。在这里,我想你想*.*

如果你只想要的文件名(没有路径的话),你可以这样写:

@echo off 

for /r T:\EMP\SST %%i in (*.*) do echo %%~nxi>>D:\MultiThreading\ReadFile.txt

如果你想在文件名+相对路径,这是稍微复杂一些,但可行的,由启用延迟扩展到能够删除路径前缀+反斜杠:

@echo off 

setlocal enabledelayedexpansion

set start_path=T:\EMP\SST

for /r %start_path% %%i in (*.*) do (

set f=%%i

echo !f:%start_path%\=!>>D:\MultiThreading\ReadFile.txt

)

FOR命令是神秘的,我要读的帮助(FOR /?)每次,但事实却是:一切有用的是在T在这里,所以我做这一切的时候:)

回答:

我相信你真的需要for /D而不是for /R您的任务(因为我假设file 11file 12file 13实际上是目录,因为它们是由for /R列举):

for /D %%I in (T:\EMP\SST\*) do echo %%~nxI 


无论如何,你的for /R语法是错误的;要递归枚举的目录需要在/R开关后立即声明(如果省略它,则假定当前目录),并且需要提供一个构成纯文件的集合(即圆括号之间的部分)只有名称模式,没有任何(绝对或相对)路径,例如*.*,以匹配所有文件。

在您的代码中,for /R枚举当前目录。由于您的设置是T:\EMP\SST,并且不包含通配符(*,?),因此for仅在遇到通配符时才会访问文件系统,因此它只是简单地追加到枚举目录中。这解释了你的怪异输出。

以上是 从输出删除目录中的批处理文件 的全部内容, 来源链接: utcz.com/qa/264626.html

回到顶部