我正在尝试编写一个简单的批处理命令,它读取文件的第二行(ProfileName),查找“;”在该行中然后拆分该行并将其存储在两个变量(ProfileName和RRSProfileName)
中 for /F "tokens=1 skip=1" %%A in (%ContentFilePath%) do ( SET ProfileName=%%A )
ECHO %ProfileName% | findstr /spin ";">nul
IF %ERRORLEVEL%==0 (
FOR /F "tokens=1,2 delims=;" %%A in ("%ProfileName%") do ( SET ProfileName=%%A& SET RRSProfileName=%%B )
)
ContentFile包含2行
blah
blah1
由于某种原因,如果存在“IF”语句,则不会设置ProfileName变量。如果我删除“IF”语句,ProfileName将设置为blah1。这很奇怪。有人可以帮忙吗? ProfileName和RRSProfileName最初都设置为“”。
答案 0 :(得分:0)
findstr /spin
它在子目录中搜索(/s
)省略不可打印的文件(/p
)忽略大小写(/i
)编号输出行(/n
),而你没有给出任何文件,因此findstr
失败,因为它的参数不正确。从这里你得到错误级别1,因此,if
内的代码不会被执行
更好地使用
for /F "usebackq tokens=1 skip=1" %%A in ("%ContentFilePath%") do ( SET "ProfileName=%%A" )
ECHO %ProfileName%| find ";" > nul
IF %ERRORLEVEL%==0 (
FOR /F "tokens=1,2 delims=;" %%A in ("%ProfileName%") do ( SET "ProfileName=%%A" & SET "RRSProfileName=%%B" )
)
或者只是(如果有可能,我不知道您的所有情况),将两个步骤合并为一个
for /f "usebackq tokens=1,2 skip=1 delims=;" %%a in ("%ContentFilePath%"
) do ( set "ProfileName=%%a" & set "RRSProfileName=%%b" )
它读取相同的必需行,如果存在分号,则用于分割行,每个变量检索所需的内容。
答案 1 :(得分:0)
for /F "tokens=1,2 skip=1delims=;" %%A in (q22602116.txt) do SET "ProfileName=%%A"&SET "RRSProfileName=%%B"
对我来说效果很好,假设Profilename
应该设置为最后一行分号前面的部分,RRSprofilename
后面的部分(如果存在)
但是 - 请注意字符串赋值中 Spaces 的存在 - 它们很重要(原始批处理似乎有尾随空格......) - 这样定位的引号应该克服这个特性...