在 for 循环中替换字符串

时间:2021-06-07 13:59:41

标签: batch-file

我想从列表的每个元素中去除冒号 :。我不清楚 for 循环上下文中的字符串替换语法。您如何操作每个 %%a

@echo off
setlocal EnableExtensions disabledelayedexpansion   

set studies=sign1:chap2,sign2:chap3
for %%a in ("%studies:,=" "%") do (
echo %%~a
set var=%~a::=%
echo study %var%
)

2 个答案:

答案 0 :(得分:0)

感谢@Squashman 的建议,这是解决方案:

@echo off
setlocal EnableExtensions EnableDelayedExpansion    

set studies=sign1:chap2,sign2:chap3
for %%a in ("%studies:,=" "%") do (
  set temp=%%~na
  echo !temp::=!
)

答案 1 :(得分:0)

完全基于您发布的内容...

你可以使用这个:

@Echo Off
SetLocal EnableExtensions   
Set "studies=sign1:chap2,sign2:chap3"
Set "}=%studies::=%"
Echo "%}:,=" "%"
Pause

对于这个输出:

"sign1:chap2" "sign2:chap3"

但是,由于这不是您现实世界的问题,因为您不会像这样手动定义 studies 变量,您可以根据需要精确地定义它:

@Echo Off
SetLocal EnableExtensions
Set "studies="sign1chap2" "sign2chap3""
Echo %studies%
Pause

您更有可能想要更像这样的东西:

@Echo Off
SetLocal EnableExtensions
Set "studies=sign1:chap2,sign2:chap3"
For %%G In (%studies::=%) Do Echo "%%~G"
Pause

对于这个输出:

"sign1:chap2"
"sign2:chap3"

如果情况并非如此(我怀疑),那么我已经回答了您本不想问的问题,因为您故意提供的信息不足以让我们为实际问题提供可靠的解决方案。

可能:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "studies=sign1:chap2,sign2:chap3"
For %%G In ("%studies:,=" "%") Do (Set "}=%%~G"
    SetLocal EnableDelayedExpansion
    Echo !}::=!
    EndLocal
)
Pause

甚至:

@Echo Off
SetLocal EnableExtensions
Set "studies=sign1:chap2,sign2:chap3"
For %%G In (%studies%) Do For /F "Tokens=1,* Delims=:" %%H In ("%%~G") Do Echo %%H%%I
Pause

有许多不同的答案排列,但由于您缺乏提供的信息或确切的预期结果,我们很难猜测哪种解决方案最适合您的情况。