2016-11-04 110 views
0

我有如下的批处理文件是输出文件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 

如何做到这一点

+0

您的代码和您的示例输出不匹配!请相应地重新检查和[编辑](http://stackoverflow.com/posts/40423648/edit)你的问题... – aschipfl

+0

@aschipfl我不得不重新命名它的东西..但它的一样,告诉我,如果你需要任何解释。所有我要求一个命令或一种方法来删除输出中的'目录' – Moudiz

+0

谢谢!所以'文件11'等是子目录,对吧? – aschipfl

回答

1

您以错误的方式使用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在这里,所以我做这一切的时候:)

2

我相信你真的需要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仅在遇到通配符时才会访问文件系统,因此它只是简单地追加到枚举目录中。这解释了你的怪异输出。