标题: [文本处理] [已解决]批处理如何把(当前路径)字符转为Unicode编码? [打印本页]
作者: aries215 时间: 2019-2-3 15:42 标题: [已解决]批处理如何把(当前路径)字符转为Unicode编码?
本帖最后由 aries215 于 2019-2-7 14:03 编辑
想把 %~dp0 转为 \u0043\u003a\u005c 这类形式。
要求纯批处理,简单通用。不要Powershell。
非常感谢!
作者: aries215 时间: 2019-2-3 15:43
本帖最后由 aries215 于 2019-2-3 16:07 编辑
JS可以直接获得,VBS可用Hex(AscW(strings))获得,怎么写成简单直接的批处理命令呢?
作者: aries215 时间: 2019-2-3 16:29
怎么把下方vbs代码,改成批处理命令,支持变量输入输出呢?- s = "𪚥"
- WScript.Echo Hex(ToCodePoint(s))
-
- 'return code point of a character
- Function ToCodePoint(s)
- Dim uni, uni2
- uni = CLng("&H" & Hex(AscW(s)))
- If (uni >= &HD800&) And (uni <= &HDBFF&) Then
- uni2 = Mid(s, 2, 1)
- If uni2 = "" Then
- Err.Raise 8732, "ToCodePoint", _
- "Invalid surrogate pair"
- End If
- uni2 = CLng("&H" & Hex(AscW(uni2)))
- uni = &H10000 + (((uni - &HD800&) * 2 ^ 10) Or (uni2 - &HDC00&))
- End If
- ToCodePoint = uni
- End Function
复制代码
作者: aries215 时间: 2019-2-3 16:31
本帖最后由 aries215 于 2019-2-3 17:24 编辑
JS的命令似乎更简单,怎么用WScript于批处理呢?- function reconvert(str){
- str = str.replace(/(\\u)(\w{1,4})/gi,function($0){
- return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{1,4})/g,"$2")),16)));
- });
复制代码
作者: yhcfsr 时间: 2019-2-3 17:15
本帖最后由 yhcfsr 于 2019-2-3 17:19 编辑
看到楼主说不要powershell我就放心了,所以我特意写了一段powershell代码.
食用方法:保存为bat执行.- @echo off
- powershell -NoProfile -NoLogo -command "& {$str='%~dp0';$str;$str=$str.ToCharArray();$result=@(foreach($char in $str){\"\u{0:x4}\" -f [int]$char});$result -join '';}"
- pause
复制代码
测试结果:- C:\Users\CF\Desktop\
- \u0043\u003a\u005c\u0055\u0073\u0065\u0072\u0073\u005c\u0043\u0046\u005c\u0044\u0065\u0073\u006b\u0074\u006f\u0070\u005c
复制代码
作者: aries215 时间: 2019-2-3 17:19
本帖最后由 aries215 于 2019-2-3 17:26 编辑
回复 5# yhcfsr
你家住哪的?我去拜年,保证不踢你
作者: aries215 时间: 2019-2-3 18:02
本帖最后由 aries215 于 2019-2-3 20:29 编辑
我要看看高手怎么写代码
作者: 523066680 时间: 2019-2-3 20:59
回复 7# aries215
高手都潜水。浮在水面的路过
作者: yhcfsr 时间: 2019-2-3 22:20
别折腾了.- @set @n=0/*&@echo off
- echo;%~dp0|cscript -nologo -e:jscript "%~f0"
- pause&exit /b */
-
- var line=WSH.StdIn.ReadLine();
- var len=line.length;
- var result='';
- for(i=0;i<len;i++)
- {
- var code=('000'+(line.charCodeAt(i)).toString(16)).slice(-4);
- result+='\\u'+code;
- }
- WSH.Echo(result)
复制代码
作者: aries215 时间: 2019-2-3 23:20
本帖最后由 aries215 于 2019-2-7 14:08 编辑
回复 9# yhcfsr
第二行修改成这样,批处理就可以用了:- for /f %%a in ('echo;%~dp0^|cscript -nologo -e:jscript "%~f0"') do (
- echo %%a
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |