批量删除字符串末尾字符

3

我从一个JSON文件中得到了以下字符串:

39468856,

现在,我想要对这些数字进行计算...因此,我需要去掉末尾的,

目前我使用以下代码:

for /f "skip=24 tokens=2" %%a in (text.txt) do ( 

Set %%a=%%a:~0,1%
echo %%a

SET /a b=a*2
echo %%a
@echo Uebertragen in 10s:

echo %%a bytes

)
Set %%a=%%a:~0,1% 对我不起作用,SET /a b=a*2 也是一样的(可能是因为其中有一个 ,)。
请帮我解决这个问题...
提前致谢。

1
字符串操作不能使用 for 变量 (%%a),只能使用“普通”变量 (%var%)。在 for 块内,您必须使用延迟扩展!var! - Stephan
@Stephan,或者call set ;) - Joey
1个回答

4

如果没有看到完整的代码和输入文件,以下可能是最简单的解决方案之一。

for /f "skip=24 tokens=2" %%a in (text.txt) do for %%b in (%%a) do set /a "b=%%b*2"
echo %b%

此选项使用第二个for循环删除作为分隔符处理的逗号。

for /f "skip=24 tokens=2" %%a in (text.txt) do 2>nul set /a "b=2*%%a"
echo %b%

在这种情况下,操作数的顺序已经改变,并且错误输出(逗号仍然存在)被丢弃。
如果输入文件数据允许的话,也许可以使用这个。
for /f "skip=24 tokens=2 delims=, " %%a in (text.txt) do set /a "b=%%b*2"
echo %b%

包括逗号作为for /f中的分隔符,分词器将丢弃它,逗号将不会包含在检索到的数据中。
在所有情况下,由于echo已移出设置变量的代码块,因此无需延迟扩展。
但是,也许没有一种选择可以使用。那么您最好的选择是使用延迟扩展。
setlocal enabledelayedexpansion
for /f "skip=24 tokens=2" %%a in (text.txt) do ( 
    for %%b in (%%a) do set /a "b=%%b*2"
    echo !b!
)

或者,采用原始子字符串方法。
setlocal enabledelayedexpansion
for /f "skip=24 tokens=2" %%a in (text.txt) do ( 
    set "b=%%a"

    rem Any of these could work
    set "b=!b:~0,-1!"
    set "b=!b:,=!"

    set /a "b*=2"
    echo !b!
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接