首页 > 解决方案 > 如何将批处理代码放在一行命令中

问题描述

我是命令行和批处理文件的新手。我的任务是编写一个代码来检查 txt 文件中是否存在特定行。如果文件中不存在该行,则代码应该添加此特定行。问题是我必须在一行中编写此代码,因为它将用于 GUI 只能保留和执行一个命令行但不能执行批处理文件的软件。这是我所拥有的:

  1. 带行的文件1.txt
ab cde
1 23
456

  1. 我的命令行:
set /a f=3 & set "My_str=f gh" & (for /f "delims=" %x in (1.txt) do if "%My_str%"=="%x" set /a f=1 ) & ( if !f! lss 2 call echo %My_str%>>1.txt)

所以我使用标志f来指示我的 txt 文件中存在行f gh。标志值f=3表示该行不存在,需要添加。如果该行存在,则标志将具有值f=1并且条件(!f! lss 2)不会触发添加该行。
它看起来不像if !f! lss 2我想要的那样工作,我的命令只是在每次该行时添加,f gh尽管它已经存在于文件中(例如,之前在其他 cmd 窗口中执行过之后)。谢谢。

标签: cmd

解决方案


如果您的命令是在延迟扩展 ON ( cmd /V:ON) 的情况下运行的,那么您的标志检查似乎!f!应该是 thenIF NOT !f! lss 2 call echo ...或者,因为!f!这里是一个标志IF NOT !f! == 1 call echo .... 意思是“if !f! lss 2 call ..如果!f!低于 2”,如果!f!是 1,这些将触发添加。我也猜你可能需要激活延迟扩展。

然后你应该强制它:

cmd /V:ON /C "set /a f=3 & set "My_str=f gh" & (for /f "delims=" %x in (1.txt) do if "%My_str%"=="%x" set /a f=1 ) & ( if NOT !f! lss 2 call echo %My_str%>>1.txt)"

推荐阅读