cmd - 如何将批处理代码放在一行命令中
问题描述
我是命令行和批处理文件的新手。我的任务是编写一个代码来检查 txt 文件中是否存在特定行。如果文件中不存在该行,则代码应该添加此特定行。问题是我必须在一行中编写此代码,因为它将用于 GUI 只能保留和执行一个命令行但不能执行批处理文件的软件。这是我所拥有的:
- 带行的文件
1.txt
:
ab cde
1 23
456
- 我的命令行:
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 窗口中执行过之后)。谢谢。
解决方案
如果您的命令是在延迟扩展 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)"
推荐阅读
- node.js - 如何使用 Express 在另一条路由上渲染一些路由并从 CDN 提供 SPA
- android - 试图让按钮转到另一个屏幕 - 应用程序关闭
- hibernate - 有什么方法可以抑制 Hibernate 5 中的重复列验证?
- java - 如何更改 Swagger-ui URL 前缀?
- android - 如何静音和取消静音按钮中播放的声音
- c++ - 检查传递给 cpp 中的 popen API 的命令中的错误
- nats.io - 每当触发 DisconnectedEventHandler 时, args.Conn.ConnectedUrl 在 NATS.IO C# API 中为空
- php - 如何在switch case中有2个值
- rabbitmq - 消息代理之间有什么区别?
- jquery - 点击事件上的按钮