我正在尝试编写一个 .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!
)
)
输入/输出:
==> 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
关于windows - 试图更换;使用 cmd 文件在 txt 文件中使用 ASCII 控制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006271/