如何在目录的每个文本文件上运行命令并删除每个文本文件?

时间:2017-01-13 06:05:49

标签: batch-file

我有一个目录,例如5个文本文件 批处理文件应该对文本文件执行任务,然后删除该文件。

是否有方法在循环中执行此操作,直到没有文本文件为止?

通过在万维网上搜索,我找到了一些代码来计算目录中的文件数量,这可能是一个很好的起点。

@echo off
set count=0
for %%x in (*.txt) do set /a count+=1
echo %count%
endlocal
Pause

是否有方法将此代码合并到批处理文件类型的循环中?

3 个答案:

答案 0 :(得分:1)

这确实是一个很好的起点!还有一些事项需要注意:

  • 您可以使用语法

    在循环中执行多个命令
    do (
    REM do things here
    )
    
  • 在循环中使用变量进行设置时,必须使用DelayedExpansion。在StackOverflow上看一下这里有大约5百万个问题,为什么批处理中的变量没有设置在循环中。

  • 您正在使用的参数(在您的情况下为%%x)包含有关文件的重要信息(如果您正在循环它们)。它们列在over here

  • 您不能在该循环中使用任何goto,否则它将被破坏!这包括::的评论(您通常应将其替换为REM)。

有关其他帮助请查看SO,例如SS64。另请注意,您可以使用help <commandname><commandname> /?

获取有关命令的更多信息

答案 1 :(得分:0)

你可能需要的是一种while循环解决方案。遗憾的是,while循环中不存在内置的Windows命令,但您可以轻松地自行模拟它。只要条件为真,while循环就是执行某些代码的东西。要评估条件,您需要IF命令。要跳回某些代码(或跳过某些代码),您需要goto命令和:labelName形式的标签(没有其他任何内容可以与标签声明在同一行)。要跳转到标签,您可以使用goto labelNamegoto :labelName甚至goto:labelName

你的while循环可以采用两种形式:

  1. 每次首先评估条件然后执行代码(while-do循环):循环将是这种形式

    :loop
    Rem commands to prepare your condition if any come here
    <commands_prepare_condition>
    IF NOT <condition> goto :outsideLoop
    Rem commands to loop over come here
    <commands_loop>
    goto :loop
    
    :outsideLoop
    <command_after_loop>
    
  2. 每次首次执行循环内的代码,然后验证下一轮(do-while循环)的条件:

    :loop
    Rem commands to loop over come here
    <commands_loop>
    Rem commands to prepare your condition if any, come here
    <commands_prepare_condition>
    IF <condition> goto :loop
    
    <commands_after_loop>
    

    请注意,在这种情况下,即使第一次不满足条件,循环也将始终至少执行一次,因为在循环中执行代码后验证了条件。

  3. 在每两个案例中:

    • 用准备条件的命令替换<commands_prepare_condition>。由于条件列表仅限于IF,您可能需要先准备一些变量或其他变量。在您的情况下:文件数。

    • 使用this page上的可能性替换<condition>以及您想要成为真实的条件。在您的情况下:%count% GTR 0。但请考虑@aschipfl的评论并使用EXIST "*.txt",它不需要任何准备,只有当存在任何具有txt扩展名的文件时才会变为true

    • 在循环而不是<commands_loop>

    • 时放置您要执行的所有命令
    • <commands_after_loop>是循环后的命令必须去的地方。退出循环时将执行该部分。

答案 2 :(得分:0)

打开命令提示符窗口并运行for /?。输出帮助解释了如何使用命令 FOR 对目录中的文件或数字或从某处读取的各种字符串执行某些操作。

您可以使用简单的任务:

@echo off
for %%I in (*.txt) do (
    echo File: "%%~fI"
    echo del "%%~fI"
)
pause

使用命令行 FOR 的命令块中的命令 ECHO 替换第一行,以使用找到的* .txt文件,该文件名称由case保存 - 敏感循环变量I

如果批处理文件按预期正常工作,请在命令块的第二行删除echo

注意:此批处理文件只输出每个找到的* .txt文件的名称,其中包含完整路径和命令行,用于删除* .txt文件而不进行删除。< / p>