如何获取批处理文件中的字符串长度?

2024-04-19

似乎没有一种简单的方法可以获取批处理文件中字符串的长度。例如。,

SET MY_STRING=abcdefg
SET /A MY_STRING_LEN=???

我如何找到字符串的长度MY_STRING?

如果字符串长度函数处理字符串中所有可能的字符(包括转义字符),则会加分,如下所示:!%^^()^!.


由于没有内置的字符串长度函数,您可以编写自己的函数,如下所示:

@echo off
setlocal
REM *** Some tests, to check the functionality ***
REM *** An emptyStr has the length 0
set "emptyString="
call :strlen result emptyString
echo %result%

REM *** This string has the length 14
set "myString=abcdef!%%^^()^!"
call :strlen result myString
echo %result%

REM *** This string has the maximum length of 8191
setlocal EnableDelayedExpansion
set "long=."
FOR /L %%n in (1 1 13) DO set "long=!long:~-4000!!long:~-4000!"
(set^ longString=!long!!long:~-191!)

call :strlen result longString
echo %result%

goto :eof

REM ********* function *****************************
:strlen <resultVar> <stringVar>
(   
    setlocal EnableDelayedExpansion
    (set^ tmp=!%~2!)
    if defined tmp (
        set "len=1"
        for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
            if "!tmp:~%%P,1!" NEQ "" ( 
                set /a "len+=%%P"
                set "tmp=!tmp:~%%P!"
            )
        )
    ) ELSE (
        set len=0
    )
)
( 
    endlocal
    set "%~1=%len%"
    exit /b
)

该函数始终需要 13 个循环,而不是需要 strlen 循环的简单 strlen 函数。
它处理所有字符。

奇怪的表情(set^ tmp=!%~2!)对于处理超长字符串是必要的,否则无法复制它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取批处理文件中的字符串长度? 的相关文章

随机推荐

  • 如何在 tkinter 中找到当前小部件的大小?

    我在用着Python and Tkinter 并且我需要知道小部件的当前尺寸 宽度 高度 我试过了somewidget width 但它仅返回一个固定值 并且每当小部件大小发生变化时 例如 当调整窗口大小时 它都不会更新 somewidge
  • 如何使 array.forEach(async fn) 同步?

    假设我有一个数组 我想对数组的每个元素执行异步函数 let a x1 x2 x3 I want to await a forEach async x gt which equals to let fn async x gt await fn
  • 防止没有 GL 扩展的设备从 Google Play 下载应用程序

    是否可以使应用程序在 Google Play 商店中没有特定 OpenGL ES 扩展的设备上不可用 Since
  • 如何使用 迭代嵌套列表?

    使用 JSF 2 0 我需要显示一个表 其中每一行都包含一个可打开弹出窗口的链接 我有两个模型 A其中有id and List b 属性和B其中有id and name特性 在我的支持豆中 我有一个List a 财产 在我看来 我正在使用
  • 特征内的常量表达式?

    我有一个特点 看起来像这样 pub trait Buf
  • Node JS 和 Webpack 意外令牌 <

    我已经开始学习了Node JS 这是我的文件 索引 html div h1 Hello h1 h1 h1 div app js var http require http path require path fs require fs co
  • 替换 Pandas 系列给定条件中的值

    这是一个微不足道的问题 我只是无法找到明确的答案 我有一个系列对象 random pd Series np random randint 10 10 我想将所有大于 1 的值替换为 0 我该如何执行此操作 我试过了 Random repla
  • iOS 捏合缩放和两指同时旋转

    这是我的代码 视图加载 UIPinchGestureRecognizer pinch UIPinchGestureRecognizer alloc initWithTarget self action selector pinch self
  • Applescript 从同一目录运行 bash 脚本

    我正在尝试构建一个 AppleScript 来启动我的 shell 脚本 路径结构如下 Users ryan myscript applescript scpt bash sh 我的AppleScript如下 tell applicatio
  • glDrawElements 在 PyOpenGL 中绘制立方体

    我最近开始通过 Python 学习 OpenGL 这要归功于几个教程 尤其是 Nicolas P Rougier 的教程 http www labri fr perso nrougier teaching opengl http www l
  • Inno Setup 选择一个目录来安装预定义集中的文件

    在这种情况下 我需要将文件安装到特定目录 但在不同的计算机上它可能位于不同的文件夹中 所以我需要检查哪个是正确的 例如 我有一个文件 需要将其安装在A文件夹或B文件夹或C文件夹 取决于计算机有A or B or C 所以我需要先检查一下计算
  • TFS 重新成为孙子

    几天来我一直在尝试一切我能想到的方法来让它发挥作用 无基础的合并 重新设置父级 分支然后重新设置父级 我想重新设置一个分支的父级 使其成为其中一个子级的子级 并打破该分支与其父级之间的关系 在下图中 我想将 Cassidy Main 和 B
  • Android 获取日期并插入到文件名

    我有一个非常烦人的问题 我想获取当前日期 时间并将其插入文件名中 但我一生都无法让它工作 我想获取 2011 11 18 12 13 57 的时间 然后将其插入到我的文件名中 文件名 2011 11 18 12 13 57 tar gz 我
  • 如何通过单击超链接打开文件

    我有这张桌子 我想单击链接 文件 无论什么文件 将在新的弹出窗口中打开 这是我的代码
  • 将 SVG 从文件加载到画布并取消分组

    我使用 FabricJS 和函数将 SVG 文件上传到画布 fabric loadSVGFromURL url function objects options group fabric util groupSVGElements obje
  • Linux 上共享串口

    我正在使用 Raspberry Pi 进行一个项目 该项目需要能够写入和读取串行端口 但来自不同的程序 程序 A 需要能够从外围设备 A 正在发送数据的串行端口读取数据 程序B需要向串口写入数据 外设B正在监听串口 供参考 本例中程序A是G
  • 将 matlab 中的 find() 转换为 python

    我正在将代码从 Matlab 转换为 Python Matlab中的代码为 x find sEdgepoints gt 0 sNorm lt lowT sEdgepoints x 0 两个数组的大小相同 我基本上是在创建一个掩码 I rea
  • Xcode 14.0 - PackageIndex.findPackages 失败:featureDisabled 警告

    自从我升级到 Xcode 14 0 后 我收到以下警告 PackageIndex findPackages failed featureDisabled 网络搜索没有得到任何结果 我有一个SPM包 但似乎没有任何问题 有人知道如何摆脱这个警
  • 如何在部署的appengine数据库上的eclipse中调试服务器代码?

    我在 Eclipse 中有一个 Google AppEngine Java 项目 我想在 Eclipse 中调试本地代码 但使用 AppEngine 上部署的数据库 到目前为止 我使用带有用户名 密码的远程 API 旧方式 此方法将被弃用
  • 如何获取批处理文件中的字符串长度?

    似乎没有一种简单的方法可以获取批处理文件中字符串的长度 例如 SET MY STRING abcdefg SET A MY STRING LEN 我如何找到字符串的长度MY STRING 如果字符串长度函数处理字符串中所有可能的字符 包括转