我试图用逗号(,)替换字符串中的(〜),但是在字符串替换期间使用(〜)表示显示该索引中的所有字符(例如%a:〜2%)。
我的字符串是1,2,3~4~5~6,7~8,9,10
我已经尝试使用插入符(^)而不起作用。
使用插入符号(^)%a:^~=,%
,我得到1,2,3~4~5~6,7~8,9,10
的回声
没有尖号(^)%a:~=,%
,我得到a:~=,
输入:
1,2,3~4~5~6,7~8,9,10
代码:
SET a=1,2,3~4~5~6,7~8,9,10
SET a=%a:^~=,%
echo !a!
预期输出:
1,2,3,4,5,6,7,8,9,10
实际输出:
a:~=,
或1,2,3~4~5~6,7~8,9,10
(〜)的转义字符是什么,因此我可以将其替换为字符串?
编辑:添加有关更广泛项目的更多详细信息
我有一个excel工作表,其中包含一些单元格,这些单元格包含诸如data, data
之类的项目,然后将该excel工作表导出为csv,以便我可以遍历数据。转换excel后,包含data, data
的单元格将转换为"data, data"
。我发现了一种解决方法,可以在使用逗号(。)循环访问.csv时将数据作为一个单元格保存,方法是首先循环查找双引号(“),发现它们后将数据放在引号内并用波浪号(〜)替换逗号(,),并删除双引号(“)。这会将数据更改为data~ data
。然后,我通过此更改对原始行进行了改革。后来我根据用户的输入访问数据,告诉我他们想要哪一列数据。在此阶段,我希望能够将波浪号(〜)转换回逗号(,),以便完全按excel表中所示返回数据,即将data~ data
转换为{{1} }
答案 0 :(得分:0)
目前尚无法批量摆脱波浪号,但是有一些解决方法。
@echo off
set a=1,2,3~4~5~6,7~8,9,10
:start
for /f "tokens=1* delims=~" %%i in ("%a%") do set "a=%%i,%%j"
echo %a% | findstr "~">nul 2>&1
if %errorlevel% equ 0 goto start
echo %a%
因为很明显,不确定是否需要扩展?但很高兴解释是否需要:)
答案 1 :(得分:0)
由于无法转义~
字符,因此您只能解决它。
这种方法呢(尚未测试):
@echo off
set "STR=1,2,3~4~5~6,7~8,9,10"
set "NEW=,"
:LOOP
if not defined STR goto :END
rem // Get part left from first `~`:
for /F "delims=~ eol=~" %%I in (",%STR%") do set "PRT=%%I"
set "PRT=%PRT:~1%"
rem // Get part right from first `~`:
set "STR=%STR:*~=%"
rem // Replace a single `~` by `,`:
set "NEW=%NEW%%PRT%,"
goto :LOOP
:END
echo(%NEW:~1,-1%