Batch file Delete.txt文件不能以命令提示符中的任何字符开头
我正在使用下面的代码删除未启动Batch file Delete.txt文件不能以命令提示符中的任何字符开头,batch-file,cmd,dos,command-prompt,Batch File,Cmd,Dos,Command Prompt,我正在使用下面的代码删除未启动“S”的.txt文件: 但它不起作用 如何做到这一点?这并不漂亮,但你可以: 构造for循环 告诉for对…的输出进行迭代 用/V“S”(不包括S)通过管道查找的文件的裸(/B)目录列表 告诉for对其处理的每个项目调用del。使用/f以避免需要del确认 下面是一个例子: for /f %F in ('dir /B ^| find /v "S"') do del %F /f 更新:为了回应否决票,下面是一个经过更正和简化的示例: for /f %F in ('d
“S”
的.txt
文件:
但它不起作用
如何做到这一点?这并不漂亮,但你可以:
for /f %F in ('dir /B ^| find /v "S"') do del %F /f
更新:为了回应否决票,下面是一个经过更正和简化的示例:
for /f %F in ('dir S*.txt /B') do del %F /f
这不涉及递归搜索或任何比所述问题更高级的问题
更新:我应该说“如果可以,请使用Powershell”。命令提示符是一个可怕的shell:
gci -Filter S*.txt -recurse | rm
对于windows Vista或更高版本的操作系统,请尝试以下操作
@echo off
setlocal enableextensions disabledelayedexpansion
set "targetFolder=%cd%"
set "tempFolder=%temp%\%~nx0.%random%.tmp"
md "%tempFolder%" >nul 2>nul
robocopy "%tempFolder%" "%targetFolder%" /nocopy /purge /xf s* /l
rd "%tempFolder%" >nul 2>nul
这将创建一个空文件夹,用作清除目标文件夹的源,即删除源中不存在且目标中存在的文件。由于源为空,所有文件都将被删除,但/xf s*
向robocopy
指示应排除以s
开头的文件。包括结束/l
开关,仅列出将被删除的文件。如果输出正确,请将其拆下
对于没有robocopy
的windows版本,可以使用此选项
@echo off
setlocal enableextensions disabledelayedexpansion
set "targetFolder=%cd%"
for /f "delims=" %%a in ('
dir /b /a-d "%targetFolder%" ^| findstr /i /v /b /c:"s"
') do echo del "%%~fa"
由于将对每个要删除的文件执行del
命令,因此效率较低。其思想是使用dir
命令检索所有文件的列表,并使用findstr
to,忽略大小写(/i
)过滤器仅检索不包括(/v
)行开头(/b
)字符串S
(/c:“S”
)的元素列表
del
命令仅回显到控制台。如果输出正确,请删除echo
命令为什么不将S*.txt
移到其他文件夹,全部删除,然后移回
move S*.txt somefolder\
del *.txt
move somefolder\S*.txt .\
重复?dos不是unix。正则表达式在这里不起作用。我不知道如何指出这一点,但问题可能是服务器故障而不是堆栈溢出。您的代码将过滤掉文件名或扩展名中任何包含S的文件,并且不排除文件夹。对于带有空格的名称,它也会失败。请更新以更正@foxidrive引起的一些问题。这仍然不能处理带有空格的文件。欢迎使用堆栈溢出。您可以使用
“delims=“
处理空格,并将最后一个%F
括在双引号中,还可以在dir
命令中添加/a-d
,以排除文件夹。
move S*.txt somefolder\
del *.txt
move somefolder\S*.txt .\