批处理文件:替换功能字符

时间:2012-11-05 10:59:24

标签: batch-file

我找到了一种从文件中删除文字的方法,例如:

set text=!text:^"~JP~"=!

删除文字~JP~。这样做效果很好,因为长期没有要删除的功能特征。现在我有了字符→(如右箭头所示,ASCII代码22,十六进制1A) -

set text=!text:^"→  "=!

导致错误(以及一些哔哔声)。该行分为

set text=!text:^"
"=!

有办法吗?比较文本与十六进制代码22 1A 09 22(22 =“,1A =→,09 =标签)?

2 个答案:

答案 0 :(得分:3)

正如杰布在他的回答中解释的那样,批量解析器将0x1A转换为换行符,但如果使用变量,则可以执行搜索和替换。以下是jeb谈论的一个例子。我在批处理文件中嵌入了字符串(十六进制代码)0x1A 0x09。我使用FOR / F和FINDSTR将值转换为FOR变量。之后的一切都相当直接。

@echo off
setlocal enableDelayedExpansion
:::→    :
for /f "delims=:" %%A in ('findstr "^:::" "%~f0"') do (
  set "text=abc"%%A"def"
  set text
  set "text=!text:"%%A"=!"
  set text
)

以下是结果:

text=abc"→      "def
text=abcdef

我没有在嵌入文本中包含引号,因为之后的所有内容都必须是有效的语法。选项卡和冒号是无害的,但引用会导致语法错误。

0x1A的行为表现得像换行符可能很有用。这是我用来解决的机制:Is it possible to embed and execute VBScript within a batch file without using a temporary file?

答案 1 :(得分:1)

您甚至可以替换像0x1A这样的字符,但这个字符有点问题,因为它会在解析批处理文件时转换为换行符。

但是使用内容为0x1A的变量将起作用。