使用批处理脚本处理字符串
我正在创建一个批处理脚本,它必须循环遍历文件中的行,检查某个字符串,并且如果这些字符串的匹配前缀是'#'(注释掉) 。使用批处理脚本处理字符串
我完全新批处理脚本,所有我能走到今天是:
for /f %%j in (CMakeLists.txt) do (
if "%%j"=="Extensions_AntTweakBar" (
echo lol1
)
if "%%j"=="Extensions_Inspection" (
echo lol2
)
if "%%j"=="Extensions_InspectionBar" (
echo lol3
)
)
所以我现在的问题是,我不知道如何在字符串批处理脚本内运行。如果有人可以帮助我走出这将不胜感激:)
你可以使用你想追加的文字,后面跟着你的变量。
C:\>set MY_VAR=Hello world!
C:\>echo #%MY_VAR%
#Hello world!
C:\>set MY_VAR=#%MY_VAR%
C:\>echo %MY_VAR%
#Hello world!
如果你只是在做回声,那很好。 echo #%%j
会做你所需要的。
但是,如果要将行设置为变量,则必须使用enable delayed expansion。将setlocal ENABLEDELAYEDEXPANSION
添加到文件的顶部,然后用!
而不是%
来包围变量。例如(和通知,我已经添加了delims=
把整条生产线在%%j
而不是第一个字就行了):
@echo off
setlocal ENABLEDELAYEDEXPANSION
set LINE=
for /f "delims=" %%j in (CMakeLists.txt) do (
set LINE=%%j
if "%%j"=="Extensions AntTweakBar" (
set LINE=#%%j
)
if "%%j"=="Extensions Inspection" (
set LINE=#%%j
)
if "%%j"=="Extensions InspectionBar" (
set LINE=#%%j
)
echo !LINE!
)
鉴于此输入文件:
Extensions AntTweakBar
some text
Extensions Inspection
Extensions What?
some more text
Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text
上述脚本产生此输出:
C:\>comment.bat
#Extensions AntTweakBar
some text
#Extensions Inspection
Extensions What?
some more text
#Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text
并且当然删除@echo off
将帮助您调试问题。
但是所有这一切都说明了,你所处的极限可以通过批处理字符串处理完成。如果您仍想使用批处理命令,则可能需要开始将行写入临时文件,并使用findstr
和正则表达式。
这几乎是我现在正在做的,自己修复它:) - 但+1 :) – Skeen 2010-11-19 06:34:59
没有更好的理解你希望你的循环或者什么你的CMakeLists.txt文件看起来像里面是什么,试试这对于初学者:
FINDSTR "SOMETHING" %%J && ECHO #%%J || ECHO %%J
& &使得第二命令(ECHO)以第一命令退出而没有错误状态为条件,并且||就像一个逻辑OR,它在第一个没有时运行。
它可以在蝙蝠完成...但你为什么选择它? – 2010-11-17 22:23:11
您能否提供一个示例文件,以便我们可以看到是否存在需要保留的任何文本格式,即空行,缩进等......或者您能否确定地说明这不是我们需要关注的问题? – 2010-12-19 22:35:56
这可以很容易地在普通的旧DOS中完成。我已经做了1000次,如果不是更多。我今天晚上会回到这个问题 - 圣诞节即将来临! – 2010-12-19 12:49:39