梦中情萱 2023-02-20 16:08 采纳率: 60.5%
浏览 11

bat如何按字节长度截取文件名

比如我想截断文件名
文件名有英文、中文。
使用fname:~0,10对于中文和英文操作都是一样的。
然而中文占2个字节,截出来的会比英文长一倍。
请问如何按照10个字节截取?

  • 写回答

1条回答 默认 最新

  • CodeBytes 2023-02-20 16:22
    关注

    该回答引用ChatGPT

    要按照字节而不是字符来截取文件名,可以使用批处理中的certutil命令。certutil是Windows自带的命令行工具,可以用来执行各种加密和解密操作,包括将二进制文件转换为十六进制格式。

    以下是一个示例批处理脚本,用于将文件名截取为10个字节:

    @echo off
    setlocal EnableDelayedExpansion
    
    set "filename=%~1"
    
    :: 使用 certutil 命令将文件名转换为十六进制格式
    for /f "delims=" %%a in ('echo !filename! ^| certutil -f -encodehex') do set "hex=%%a"
    
    :: 截取前 20 个字符(即 10 个字节)
    set "hex=!hex:~0,20!"
    
    :: 将截取后的十六进制字符串转换回原始文件名
    set "newname="
    for /l %%a in (0,2,18) do (
      set "byte=!hex:~%%a,2!"
      set /a "char=0x!byte!"
      set "newname=!newname!!char!"
    )
    
    echo Renaming "%filename%" to "%newname%"
    rename "%filename%" "%newname%"
    
    

    此脚本将输入的文件名作为第一个参数,并使用certutil将文件名转换为十六进制格式。然后,它截取了前20个字符(即10个字节),并将结果转换回原始文件名。最后,它使用rename命令将文件重命名为新名称。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月20日

悬赏问题

  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答