【问题标题】:How to replace the comma in windows batch loop?如何替换 Windows 批处理循环中的逗号?
【发布时间】:2018-09-05 07:46:19
【问题描述】:

我正在编写一个 Windows 批处理脚本来监督 jvm memusage。在我的笔记本电脑中,memusage 是逗号分隔的。我想将逗号替换为空字符,以便将其作为整数轻松处理。

但是当我写下面的代码时,memSize 的值总是空的。我如何获得价值?谢谢。

rem @echo off
:RESCAN
setlocal EnableDelayedExpansion
rem find every java process
tasklist /nh /fo table |find /i "java.exe" > temp.txt
for /F "tokens=1,2,5" %%I in (temp.txt) do (
set memSize=%%K
set memSize=%%memSize:,=%
echo %%memSize%
)
endlocal
del /f temp.txt
ping -n 10 0.0.0.0  > nul
goto :RESCAN

【问题讨论】:

  • 你从哪里得到这个奇怪的双百分比语法(%%memSize%)?这是错误的(除非你有一个像%%K 这样的for 变量引用)!

标签: string windows loops batch-file replace


【解决方案1】:

虽然您启用了延迟扩展,但您并没有使用它。因此,您需要对代码进行两次更改。注意使用感叹号来使用变量。使用百分比符号时,您的语法也是错误的。您通常只在环境变量名称的每一侧使用一个百分号。

set memSize=!memSize:,=!
echo !memSize!

【讨论】:

  • 确实如此。我做了两件事让它发挥作用。 1.我删除了 endlocal 2.我按照您的描述更改了 set 语句。谢谢。
  • 但是我有两个问题。 1. 和有什么区别!和%在那里?由于当我使用 % 替换 ! 时,代码再次中断。 2. 当我在循环之后使用 endlocal 时,我希望对循环启用延迟扩展就足够了,因为我不需要在循环之后引用任何变量。我错过了什么概念?再次感谢您。
  • @Xun,当代码在带括号的代码块内并更改变量的内容或创建新变量时,您需要使用延迟扩展来引用这些变量。这意味着您必须使用感叹号。当不在括号内的代码块内时,您可以使用百分号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多