如何在批处理脚本中转义〜字符?

时间:2019-05-24 12:44:04

标签: batch-file escaping special-characters

我试图用逗号(,)替换字符串中的(〜),但是在字符串替换期间使用(〜)表示显示该索引中的所有字符(例如%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} }

2 个答案:

答案 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%