【问题标题】:Delete .txt file not start with any character in command prompt删除 .txt 文件不以命令提示符中的任何字符开头
【发布时间】:2014-09-03 17:50:28
【问题描述】:

我正在使用以下代码删除未启动 "S".txt 文件:

del [^S]*.txt

但它不起作用。

如何做到这一点?

【问题讨论】:

标签: batch-file cmd dos command-prompt


【解决方案1】:

为什么不直接将S*.txt 移动到其他文件夹,全部删除,然后再移回来?

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

【讨论】:

    【解决方案2】:

    对于 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)过滤器仅检索开头不包括(/v)的元素列表行的 (/b) 字符串 S (/c:"s")

    del 命令只回显到控制台。如果输出正确,去掉echo命令

    【讨论】:

      【解决方案3】:

      这不漂亮,但你可以:

      1. 构造一个for循环
      2. 告诉 for 迭代...的输出
      3. 使用 /V“S”(不包括 S)通过管道查找的文件的裸 (/B) 目录列表。
      4. 告诉 for 在它处理的每个项目上调用 del。使用 /f 来避免 del 确认的需要。

      这是一个例子:

      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”。命令提示符是一个可怕的外壳:

      gci -Filter S*.txt -recurse | rm
      

      【讨论】:

      • 我不知道如何表明这一点,但问题应该是服务器故障而不是堆栈溢出。
      • 您的代码将过滤掉任何文件名或扩展名中包含 S 的文件,并且不排除文件夹。带空格的名称也会失败。
      • 更新以纠正@foxidrive 提出的一些问题。这仍然不能解决带有空格的文件。
      • 欢迎来到 Stack Overflow。您可以使用"delims=" 处理空格并用双引号将最后一个%F 括起来,还可以在dir 命令中添加/a-d 以排除文件夹。
      猜你喜欢
      • 2012-10-09
      • 2015-12-02
      • 2020-05-29
      • 2011-04-17
      • 2012-02-28
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多