[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何把(当前路径)字符转为Unicode编码?

本帖最后由 aries215 于 2019-2-7 14:03 编辑

想把 %~dp0 转为 \u0043\u003a\u005c 这类形式。
要求纯批处理,简单通用。不要Powershell。
非常感谢!

本帖最后由 aries215 于 2019-2-3 16:07 编辑

JS可以直接获得,VBS可用Hex(AscW(strings))获得,怎么写成简单直接的批处理命令呢?

TOP

怎么把下方vbs代码,改成批处理命令,支持变量输入输出呢?
  1. s = "𪚥"
  2. WScript.Echo Hex(ToCodePoint(s))
  3. 'return code point of a character
  4. Function ToCodePoint(s)
  5.     Dim uni, uni2
  6.     uni = CLng("&H" & Hex(AscW(s)))
  7.     If (uni >= &HD800&) And (uni <= &HDBFF&) Then
  8.         uni2 = Mid(s, 2, 1)
  9.         If uni2 = "" Then
  10.             Err.Raise 8732, "ToCodePoint", _
  11.             "Invalid  surrogate pair"
  12.         End If
  13.         uni2 = CLng("&H" & Hex(AscW(uni2)))
  14.         uni = &H10000 + (((uni - &HD800&) * 2 ^ 10) Or (uni2 - &HDC00&))
  15.     End If
  16.     ToCodePoint = uni
  17. End Function
复制代码

TOP

本帖最后由 aries215 于 2019-2-3 17:24 编辑

JS的命令似乎更简单,怎么用WScript于批处理呢?
  1. function reconvert(str){
  2. str = str.replace(/(\\u)(\w{1,4})/gi,function($0){
  3. return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{1,4})/g,"$2")),16)));
  4. });
复制代码

TOP

本帖最后由 yhcfsr 于 2019-2-3 17:19 编辑

看到楼主说不要powershell我就放心了,所以我特意写了一段powershell代码.
食用方法:保存为bat执行.
  1. @echo off
  2. powershell -NoProfile -NoLogo -command "& {$str='%~dp0';$str;$str=$str.ToCharArray();$result=@(foreach($char in $str){\"\u{0:x4}\" -f [int]$char});$result -join '';}"
  3. pause
复制代码
测试结果:
  1. C:\Users\CF\Desktop\
  2. \u0043\u003a\u005c\u0055\u0073\u0065\u0072\u0073\u005c\u0043\u0046\u005c\u0044\u0065\u0073\u006b\u0074\u006f\u0070\u005c
复制代码
QQ 33892006

TOP

本帖最后由 aries215 于 2019-2-3 17:26 编辑

回复 5# yhcfsr
你家住哪的?我去拜年,保证不踢你

TOP

本帖最后由 aries215 于 2019-2-3 20:29 编辑

我要看看高手怎么写代码

TOP

回复 7# aries215

    高手都潜水。浮在水面的路过

TOP

别折腾了.
  1. @set @n=0/*&@echo off
  2. echo;%~dp0|cscript -nologo -e:jscript "%~f0"
  3. pause&exit /b */
  4. var line=WSH.StdIn.ReadLine();
  5. var len=line.length;
  6. var result='';
  7. for(i=0;i<len;i++)
  8. {
  9. var code=('000'+(line.charCodeAt(i)).toString(16)).slice(-4);
  10. result+='\\u'+code;
  11. }
  12. WSH.Echo(result)
复制代码
1

评分人数

    • aries215: 非常感谢热心帮忙!技术 + 1
QQ 33892006

TOP

本帖最后由 aries215 于 2019-2-7 14:08 编辑

回复 9# yhcfsr
第二行修改成这样,批处理就可以用了:
  1. for /f %%a in ('echo;%~dp0^|cscript -nologo -e:jscript "%~f0"') do (
  2.     echo %%a
  3. )
复制代码

TOP

返回列表