我有一个目录,例如5个文本文件 批处理文件应该对文本文件执行任务,然后删除该文件。
是否有方法在循环中执行此操作,直到没有文本文件为止?
通过在万维网上搜索,我找到了一些代码来计算目录中的文件数量,这可能是一个很好的起点。
@echo off
set count=0
for %%x in (*.txt) do set /a count+=1
echo %count%
endlocal
Pause
是否有方法将此代码合并到批处理文件类型的循环中?
答案 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 labelName
,goto :labelName
甚至goto:labelName
。
你的while循环可以采用两种形式:
每次首先评估条件然后执行代码(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>
每次首次执行循环内的代码,然后验证下一轮(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>
请注意,在这种情况下,即使第一次不满足条件,循环也将始终至少执行一次,因为在循环中执行代码后验证了条件。
在每两个案例中:
答案 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>