返回列表 发帖
回复 14# xxpinqz


    不敢,看您老的注册时间,给跪了

TOP

回复 15# terse


    可以直接用 sort:
$regex = [RegEx] '\\';
get-content a.txt | sort-object -Descending { $regex.Matches($_).Count }>b.txtCOPY

TOP

回复 17# CrLf
这就行了啊 学习了

TOP

回复 2# xxpinqz


    请教下:for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"是何意?有何用处?

TOP

回复 19# zhanglei1371


    用于取得 tab 制表符,这是 plp626 发明的方法引伸出来的。
    原理是:"唉" 的 unicode 编码为 09 55,所以只要以 0x55(即字母 U) 为分隔符就能取得 tab 制表符

TOP

标题

回复 20# CrLf


    谢谢回答,这个问题我知道了。不过我还有些引申的问题:
1.如何快速获取某字符的unicode码?
2.其他的任意特殊字符如回车换行是否也能以这种方式间接得到?

TOP

回复 21# zhanglei1371


    xp 还是 win7

TOP

回复 22# CrLf


    xp

TOP

本帖最后由 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);
   }
}COPY
tcc -run a.c>a.txtCOPY
然后用 notepad2 打开 a.txt,将 ? 全文替换为空,就得到 hex 从 2E01~2E09 以及 0A2E~0E1F 的字符串了,以下:
封専尃射尅将將專尉尊尋尌對導小尐少尒尓尔尕尖尗尘尙尚尛尜尝尞尟尠COPY
但 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]
pauseCOPY
至于换行符,有更简单的获取方式:
@echo off
set 换行符=^
setlocal enabledelayedexpansion
echo 123!换行符!456
pauseCOPY
如想用 %换行符% 的格式引用,见 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 中,而且需要来回切换代码页,后者则无此限制。
1

评分人数

TOP

回复 12# CrLf


    简单测试了一下,貌似 split 快?
@echo off
more +4 %0 >a.txt
for /l %%a in (1 1 8) do type a.txt>>$ & type $>>a.txt
del $ & pause & exit /b
Toolpath\q\
Toolpath\q\fdf\
Toolpath\q\ewr\
Toolpath\eqwfqf\aff
Toolpath\2COPY
@set @n=0;/*
@echo off
cscript -nologo -e:javascript %0 <a.txt
pause&exit /b
*/
var t = new Date().getTime();
var str=WScript.StdIn.ReadAll().split('\n')
str.sort(function(a,b) {return (b+'\\').match(/\\/g).length-(a+'\\').match(/\\/g).length});
WScript.Echo(str.join('\n'))
WScript.Echo(new Date().getTime()-t)COPY

TOP

本帖最后由 CrLf 于 2014-4-9 17:03 编辑

回复 25# apang


    还真是!这是为什么!!why...

TOP

回复 24# CrLf


    Many Thx!学得了不少东西……

TOP

返回列表