从CMD中的变量中删除逗号
Remove comma from variable in CMD
你们都好吗?
我制作了一个批处理文件,用于获取具有特定 PID 的进程的内存使用情况...
这是代码:
@Echo off
REM Get memory from process using tasklist
for /f "tokens=2 delims=," %A in ('tasklist /svc /fi "SERVICES eq .Service02" /FO csv /NH') do (
REM Store PID on a variable
@Set "pidSlv02=%~A"
REM Get memory usage from process with that PID
for /f "tokens=5 delims= " %B in ('tasklist /fi "pid eq %pidSlv02%" /NH') do (
REM Store mem value on another variable
@Set "memSlv02=%~B"
REM Remove commas from variable
@Echo %memSlv02% K
)
)
所以,输出是:
1,407,356
现在,我需要将该数字转换为 1407356
我不是直接过来的。我已经尝试了几件事但没有成功。
我仍然很新,正在学习 CMD/batch 脚本...甚至不知道可以在 Windows 上做这么多。认为只有在 Linux 上才有可能。所以如果我不明白什么,请不要生我的气。我尽力了!
此外,如果我在这里拼写错误,请见谅,因为这不是我的母语。
我尝试添加代码:
set memSlv02=!memSlv02:,=!
set /a total=!total! + !memSlv02!
但是如果我使用 echo %total% 我会收到 Missing operator。 0
有什么建议吗?
这是一个示例,它应该使用您认为最适合您的命令输出您需要的数据!
@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
Set "SvcName=.Service02"
For /F Tokens^=3^ Delims^=^" %%G In ('%SystemRoot%\System32\tasklist.exe
/Fi "Services Eq %SvcName%" /Fo CSV /NH /Svc 2^>NUL') Do Set "PID=%%G"^
& For /F Tokens^=9^ Delims^=^" %%H In ('%SystemRoot%\System32\tasklist.exe
/Fi "PID Eq %%G" /Fo CSV /NH 2^>NUL') Do Set "MemKB=%%H"^
& SetLocal EnableDelayedExpansion & For /F %%I In ("!MemKB:,=!") Do EndLocal^
& Set "MemKB=%%I"
Echo %%SvcName%% = %SvcName%, %%PID%% = %PID%, %%MemKB%% = %MemKB% & Pause
您显然会替换我包含的最后一行,只是为了向您展示已定义的变量。如果您愿意,我已经简化了仅替换第二行的服务名称的过程,但根本不应修改任何其他内容。
顺便说一句,我不会解释上面的任何一个是如何工作的,所以如果你觉得有必要了解它,我建议你进行进一步的研究,但目前还不能这样做。
你们都好吗?
我制作了一个批处理文件,用于获取具有特定 PID 的进程的内存使用情况... 这是代码:
@Echo off
REM Get memory from process using tasklist
for /f "tokens=2 delims=," %A in ('tasklist /svc /fi "SERVICES eq .Service02" /FO csv /NH') do (
REM Store PID on a variable
@Set "pidSlv02=%~A"
REM Get memory usage from process with that PID
for /f "tokens=5 delims= " %B in ('tasklist /fi "pid eq %pidSlv02%" /NH') do (
REM Store mem value on another variable
@Set "memSlv02=%~B"
REM Remove commas from variable
@Echo %memSlv02% K
)
)
所以,输出是:
1,407,356
现在,我需要将该数字转换为 1407356
我不是直接过来的。我已经尝试了几件事但没有成功。 我仍然很新,正在学习 CMD/batch 脚本...甚至不知道可以在 Windows 上做这么多。认为只有在 Linux 上才有可能。所以如果我不明白什么,请不要生我的气。我尽力了!
此外,如果我在这里拼写错误,请见谅,因为这不是我的母语。
我尝试添加代码:
set memSlv02=!memSlv02:,=!
set /a total=!total! + !memSlv02!
但是如果我使用 echo %total% 我会收到 Missing operator。 0
有什么建议吗?
这是一个示例,它应该使用您认为最适合您的命令输出您需要的数据!
@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
Set "SvcName=.Service02"
For /F Tokens^=3^ Delims^=^" %%G In ('%SystemRoot%\System32\tasklist.exe
/Fi "Services Eq %SvcName%" /Fo CSV /NH /Svc 2^>NUL') Do Set "PID=%%G"^
& For /F Tokens^=9^ Delims^=^" %%H In ('%SystemRoot%\System32\tasklist.exe
/Fi "PID Eq %%G" /Fo CSV /NH 2^>NUL') Do Set "MemKB=%%H"^
& SetLocal EnableDelayedExpansion & For /F %%I In ("!MemKB:,=!") Do EndLocal^
& Set "MemKB=%%I"
Echo %%SvcName%% = %SvcName%, %%PID%% = %PID%, %%MemKB%% = %MemKB% & Pause
您显然会替换我包含的最后一行,只是为了向您展示已定义的变量。如果您愿意,我已经简化了仅替换第二行的服务名称的过程,但根本不应修改任何其他内容。
顺便说一句,我不会解释上面的任何一个是如何工作的,所以如果你觉得有必要了解它,我建议你进行进一步的研究,但目前还不能这样做。