找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26619|回复: 9

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

[复制链接]
发表于 2019-2-3 15:42:14 | 显示全部楼层 |阅读模式
本帖最后由 aries215 于 2019-2-7 14:03 编辑

想把 %~dp0 转为 \u0043\u003a\u005c 这类形式。
要求纯批处理,简单通用。不要Powershell。
非常感谢!
 楼主| 发表于 2019-2-3 15:43:30 | 显示全部楼层
本帖最后由 aries215 于 2019-2-3 16:07 编辑

JS可以直接获得,VBS可用Hex(AscW(strings))获得,怎么写成简单直接的批处理命令呢?
 楼主| 发表于 2019-2-3 16:29:44 | 显示全部楼层
怎么把下方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
复制代码
 楼主| 发表于 2019-2-3 16:31:19 | 显示全部楼层
本帖最后由 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.                 });
复制代码
发表于 2019-2-3 17:15:35 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2019-2-3 17:19:59 | 显示全部楼层
本帖最后由 aries215 于 2019-2-3 17:26 编辑

回复 5# yhcfsr
你家住哪的?我去拜年,保证不踢你
 楼主| 发表于 2019-2-3 18:02:01 | 显示全部楼层
本帖最后由 aries215 于 2019-2-3 20:29 编辑

我要看看高手怎么写代码
发表于 2019-2-3 20:59:39 | 显示全部楼层
回复 7# aries215

    高手都潜水。浮在水面的路过
发表于 2019-2-3 22:20:03 | 显示全部楼层
别折腾了.
  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技术 +1 收起 理由
aries215 + 1 非常感谢热心帮忙!

查看全部评分

 楼主| 发表于 2019-2-3 23:20:47 | 显示全部楼层
本帖最后由 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. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 22:47 , Processed in 0.019014 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表