本帖最后由 CrLf 于 2014-4-9 16:44 编辑
回复 23# zhanglei1371
NUL、LF 不行,因为 NUL 在变量表里是变量分隔符,而 LF 是 for /f 的行分隔符,其他好像都可以,我是这么获取的(半手工):- const c='\\';
- main(){
- int i;
- printf("%c%c",0xff,0xfe);
- for(i=1;i<0x20;i++){
- printf("%c%c",c,i);
- printf("%c%c",i,c);
- }
- }
复制代码
复制代码 然后用 notepad2 打开 a.txt,将 ? 全文替换为空,就得到 hex 从 2E01~2E09 以及 0A2E~0E1F 的字符串了,以下:- 封専尃射尅将將專尉尊尋尌對導小尐少尒尓尔尕尖尗尘尙尚尛尜尝尞尟尠
复制代码 但 for /f 以换行符分割行,所以其中的“尊”字要换成这个字符串里其他任意一个字,也就是说除了换行符,0x01~0x1F 都能取得
举个栗子:- @echo off
- for /f "tokens=0x09 delims=\" %%a in ('cmd /u /c echo 封専尃射尅将將專尉尉尋尌對導小尐少尒尓尔尕尖尗尘尙尚尛尜尝尞尟尠') do echo 制表符:[%%a]
- ::上例仅作演示用,其实如果只需要取特定字符,可以只用简化成这样:
- for /f "delims=\" %%a in ('cmd /u /c echo 尉') do echo 制表符:[%%a]
- pause
复制代码 至于换行符,有更简单的获取方式:- @echo off
- set 换行符=^
-
-
- setlocal enabledelayedexpansion
- echo 123!换行符!456
- pause
复制代码 如想用 %换行符% 的格式引用,见 http://bbs.bathome.net/viewthread.php?tid=20262
还有一种 chcp 的办法,见 http://bbs.bathome.net/viewthread.php?tid=12347,事实上刚才讨论的 cmd /u /c echo 的方案也出自此贴
两种方案虽然都能得到特殊字符,但原理迥异, chcp 的办法是利用各代码页语言不通的障碍来拆字,而 cmd /u /c 的办法则是用不同编码格式的差异来将字符重组。
前者不受本地语言设置的约束,应可全球通用,但需要将文字事先写入 bat 中,而且需要来回切换代码页,后者则无此限制。 |