我使用以下代码删除未启动.txt
的{{1}}个文件:
"S"
但它不起作用。
如何实现这一目标?
答案 0 :(得分:2)
为什么不将S*.txt
移动到其他文件夹,删除所有文件夹,然后再移回?
move S*.txt somefolder\
del *.txt
move somefolder\S*.txt .\
答案 1 :(得分:0)
这不是很漂亮,但你可以:
以下是一个例子:
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
答案 2 :(得分:0)
对于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
,忽略大小写(/i
)过滤器以仅检索不包含的元素列表({ {1}})在行的开头(/v
)字符串/b
(S
)
/c:"s"
命令仅回显给控制台。如果输出正确,请删除del
命令