在批处理文件中,如何处理for循环输入中的“)”字符?

问题描述 投票:0回答:1

我需要循环遍历一行文本中的每个单词并获取最后一个单词。

我使用以下代码来做到这一点。

对于 (%_IFLE_input%) 中的 %%a 执行 ( set _IFLE_last_token=%%a )

_IFLE_last_token= 现在包含最后一个单词。

但是我只是点击了一个包含“)”字符的单词,并且错误地停止了脚本

Close) was unexpected at this time.

文字是“左)关闭”

我尝试将输入变量放在引号中

对于 ("%_IFLE_input%") 中的 %%a 执行 ( set _IFLE_last_token=%%a )

但是 %%a 只是整个字符串,空格等等。

是否有正确的方法来引用字符串,以便 for 将循环遍历每个单词,但不会破坏“)”等字符的 for 循环语法?

我看到的唯一选择是过滤掉所有有毒字符,然后将它们放入空格中。

有没有更好的方法,批量? (或使用未更新的 Windows 10 22h2 可用的外部工具)

batch-file
1个回答
0
投票

处理有问题的字符串的另一种方法是延迟扩展(变量在解析行之后扩展,防止语法错误。

@echo off setlocal enabledelayedexpansion set "var=Left)Close" for %%a in (!var!) do ( set "last=%%a" ) set last
注意:这样当字符串包含一个或多个

!

时就会出现问题。

正如您所说的“文本文件中的每一行”:

@echo off setlocal enabledelayedexpansion set "var=Left!Close" for /f "delims=" %%x in (test.txt) do ( for %%a in (%%x) do ( set "last=%%a" ) echo !last! )
    
© www.soinside.com 2019 - 2024. All rights reserved.