删除.txt文件不能以命令提示符中的任何字符开头

时间:2014-09-03 17:50:29

标签: batch-file cmd dos command-prompt

我使用以下代码删除未启动.txt的{​​{1}}个文件:

"S"

但它不起作用。

如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

为什么不将S*.txt移动到其他文件夹,删除所有文件夹,然后再移回?

move S*.txt somefolder\
del *.txt
move somefolder\S*.txt .\

答案 1 :(得分:0)

这不是很漂亮,但你可以:

  1. 构建for循环
  2. 告诉迭代...
  3. 的输出
  4. 使用/ V" S"发送的文件的裸(/ B)目录列表。 (不包括S)。
  5. 告诉要对其处理的每个项目调用del。使用/ f可以避免del确认。
  6. 以下是一个例子:

    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)字符串/bS

/c:"s"命令仅回显给控制台。如果输出正确,请删除del命令