从输出删除目录中的批处理文件
我有如下的批处理文件是输出文件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 11
,file 12
,file 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