我的批处理文件在屏幕上写了一个文件列表,其中包含 .cs 扩展名
for /F "usebackq delims=" %%A in (`cleartool ls -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->"`) do (
if "%%~xA"==".cs" echo %%A
)
Run Code Online (Sandbox Code Playgroud)
这工作正常。我想通过添加另一个条件来增强功能。如果某个词存在于短语中,我想删除它。这个词是obj
我的结果的例子是
myThing\obj\this.cs
obj\other\that\this.cs
debug\this\that.cs
我试过
for /F "usebackq delims=" %%A in (`cleartool ls -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->"`) do (
if "%%~xA"==".cs" if NOT "%%A"=="*obj*" echo %%A
)
Run Code Online (Sandbox Code Playgroud)
但这与第一个相比并没有改变结果。
我认为我的 if 语法是正确的,问题实际上出在 "%%A"=="*obj*"
您的想法是正确的:*不支持通配符 ( )。
该问题的一个很好的解决方法是findstr,尽管您需要通过检索结果,%ERRORLEVEL%并且我认为您必须通过另一个变量缓存它(以便 nextif不会覆盖它的值):
echo %%A | findstr /C:"obj"
set obj_errorlevel=%errorlevel%
if "%%~xA"==".cs" if "%obj_errorlevel%"=="1" echo %%A
Run Code Online (Sandbox Code Playgroud)
……但那是一条艰难的路。
一种更简单的方法是if通过添加另一个管道阶段将条件添加到源命令(里面的那个)^| find /V "obj":
for /F "usebackq delims=" %%A in (`cleartool ls -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->" ^| find /V "obj"`)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32009 次 |
| 最近记录: |