windows - 试图更换;使用 cmd 文件在 txt 文件中使用 ASCII 控制字符

标签 windows batch-file text unicode ascii

我正在尝试编写一个 .cmd 文件来获取一个文本文件并在每行的开头添加一个字符串,将所有分号替换为 ASCII 控制代码 30 (RS),并在每行结尾加上一个 RS通过 ASCII 代码 31(美国)。当我将 RS 和 US 放入文件中时,笔记本不会保存它,除非它是 Unicode,但当我尝试以 Unicode 运行它时,它不会运行。

这是我有但不起作用的东西:

@echo on > Convert.txt & setLocal enableDELAYedexpansion

set old=;
set new=▲
set bgnstr=@TESTSTATS▲▲▲
set endstr=▲▼

for /f "tokens=* delims= " %%a in (test1.txt) do (
set str=%%a
set str=%BGNSTR%!str:%old%=%new%!%endstr%
>> Convert.txt echo !str!
)

如果我用任何其他字符替换 RS/US,它会执行我想要的操作。

最佳答案

您的脚本应该按预期工作,但 不是 ASCII 控制代码:

▲    U+25B2    Black Up-Pointing Triangle
▼    U+25BC    Black Down-Pointing Triangle

不幸的是,ASCII 控制码 30 (RS) 和 ASCII 码 31 (US) 在这里都不可见;因此从十六进制编辑器插入下一个屏幕截图。在下一个脚本中,bgnstr 变量被稍微缩短,以将 mycharmap.bat 脚本的下一个输出保持在可接受的长度。

@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
set old=;
set "new="
set "bgnstr=@TS"
set "endstr="
> Convert.txt (
  for /f "tokens=* delims= " %%a in (test1.txt) do (
    set str=%%a
    set str=%BGNSTR%!str:%old%=%new%!%endstr%
    echo !str!
  )
)

script in hexadecimal

输入/输出:

==> type test1.txt
a;b;c
d;e;f;
h;i;j

==> D:\bat\SO\39006271.bat

==> type Convert.txt
@TSabc
@TSdef
@TShij

ASCII 控制代码在 type Convert.txt 的输出中是不可见的; 下一个代码中的 mycharmap.bat 脚本和下面的屏幕截图显示了它们。 mycharmap.bat 脚本来 self 在 superuser.com 上的回答:Full description of Windows Alt+x codes

==> for /F "skip=2 delims=" %G in ('type Convert.txt') do @mycharmap.bat "'%G'"
Ch Unicode    Alt?    CP    IME    Alt   Alt0    IME 0405/cs-CZ; CP852; ANSI 1250

 @  U+0040      64         …64…     64    064    Commercial At
 T  U+0054      84         …84…     84    084    Latin Capital Letter T
 S  U+0053      83         …83…     83    083    Latin Capital Letter S
    U+001E                 …30…           030    Information Separator Two
    U+001E                 …30…           030    Information Separator Two
    U+001E                 …30…           030    Information Separator Two
 h  U+0068     104        …104…    104   0104    Latin Small Letter H
    U+001E                 …30…           030    Information Separator Two
 i  U+0069     105        …105…    105   0105    Latin Small Letter I
    U+001E                 …30…           030    Information Separator Two
 j  U+006A     106        …106…    106   0106    Latin Small Letter J
    U+001E                 …30…           030    Information Separator Two
    U+001F                 …31…           031    Information Separator One
 @TShij

printscreen

关于windows - 试图更换;使用 cmd 文件在 txt 文件中使用 ASCII 控制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006271/

相关文章:

objective-c - UILabel 文本末尾包含多个空格

java - 如何正确使用 StyledEditorKit 来对齐文本

java - Java (Eclipse) 项目的安装程序设置

java - 使用 jar 在 Windows 调度程序中运行批处理脚本

html - "Heavy Plus Sign"➕ 在 CSS::之前?

windows - 运行多个包含 "pause"的 bat 文件

sql - 将标量查询结果返回到批处理文件变量中

windows - 删除 CR LF 后将文件 A 复制到文件 B 的批处理文件

ruby-on-rails - 如何在 WSL 环境中使用 Better_errors 启动编辑器

asp.net - 如何查找 URL 注册(不是预订)?