【问题标题】:Extract first character from a string从字符串中提取第一个字符
【发布时间】:2016-04-26 06:40:09
【问题描述】:

我对 Windows 批处理编程语法一无所知。我有一个包含用户 ID 的文本文件,我需要使用 curl 命令删除它,为此我需要提取每个用户 ID 的第一个字符,然后传递给 curl 命令。我知道 curl 命令需要两个变量:

  1. 'UserID' - 从文本文件中读取。
  2. 'firstCharacter' - 从用户 ID 中提取第一个字符。

以下是从 users.txt 文件中获取用户 ID 的代码:

@echo off
for /f "tokens=*" %%a in (symantecUsers.txt) do call :processline %%a
pause
goto :eof
:processline
echo %*
goto :eof
:eof

请帮助我从读取的用户 ID 中提取第一个字符。 谢谢。

【问题讨论】:

标签: windows batch-file command-line cmd


【解决方案1】:

cmd.exe 可以进行有限数量的字符串解析。 JosefZ 为您提供了一个很好的起点。

C:>echo %PROCESSOR_ARCHITECTURE%
AMD64

C:>echo %PROCESSOR_ARCHITECTURE:~0,1%
A

【讨论】:

    【解决方案2】:

    在一个批处理/命令文件中,我总是需要前 x 个字符或一个字符串,结果很多函数都做同样的事情,但名称不同,即 getFirstChar、getFirstTwoChars 等。 - 所以决定做一个通用的我可以传入我需要的字符数的函数:

    ::-- getFirstXChars
    :getFirstXChars
        set sValIn=%1
        set /a iNo=%2
        set vWorkVal=%%sValIn:~0,%iNo%%%
        call:getFirstX %vWorkVal% vWorkVal2
        set %3=%vWorkVal2%
    
    :getFirstX
        set %2=%~1
    goto:eof
    

    使用语法是

    set varToTrim=ABCDEFG
    
    call:getFirstXChars %varToTrim% 2 varToTrimAfter
    
    @echo 1 %varToTrim%
    @echo 2 %varToTrimAfter%
    pause
    

    命令文件的结果:

    1 ABCDEFG
    2 AB
    

    【讨论】:

    • 你的函数非常不稳定,它在很多情况下都会失败,不仅对于字符串中的所有特殊字符,而且对于字符串中的简单空格(或者更好,它不能处理带空格的字符串)。更好地使用引用调用而不是 ByVal
    【解决方案3】:

    我刚刚添加了将变量“id”设置为 %%a,然后我使用子字符串表示法来获取第一个字符。 在变量名之后和变量中最后一个%之前使用:~start,length处理子字符串。

    @echo off
    for /f "tokens=*" %%a in (output.txt) do set id=%%a & call :processline %%a
    pause
    goto :eof
    :processline
    echo %id:~0,1%
    goto :eof
    :eof
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多