Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本在带有扭曲的字符串中查找字符串_Windows_Batch File - Fatal编程技术网

Windows 批处理脚本在带有扭曲的字符串中查找字符串

Windows 批处理脚本在带有扭曲的字符串中查找字符串,windows,batch-file,Windows,Batch File,我试图在批处理脚本中实现这一点,这应该很简单,但在花了几个小时之后,我还没有找到解决方案 如果CMD参数包含一系列字母,我想用单引号将每个字母括起来,并用逗号分隔。例如,如果用户输入以下内容: MYTEST.CMD ABCDEF 我想创建一个如下所示的字符串: 'A','B','C','D','E','F' 与他们在命令行中输入的相同: MYTEST.CMD "'A','B','C','D','E','F'" 其实相当简单: @echo off set "LETTERS=%~1" set

我试图在批处理脚本中实现这一点,这应该很简单,但在花了几个小时之后,我还没有找到解决方案

如果CMD参数包含一系列字母,我想用单引号将每个字母括起来,并用逗号分隔。例如,如果用户输入以下内容:

MYTEST.CMD ABCDEF
我想创建一个如下所示的字符串:

'A','B','C','D','E','F'
与他们在命令行中输入的相同:

MYTEST.CMD "'A','B','C','D','E','F'"
其实相当简单:

@echo off
set "LETTERS=%~1"
set OUTPUT=

if not defined LETTERS goto usage

:loop
  if defined OUTPUT set "OUTPUT=%OUTPUT%,"
  set "OUTPUT=%OUTPUT%'%LETTERS:~0,1%'"
  set "LETTERS=%LETTERS:~1%"
  if defined LETTERS goto loop

echo.%OUTPUT%
goto :eof

:usage
echo Please pass a few letters as argument, e.g.
echo.  %~0 ABC
goto :eof
让我们来仔细分析一下:

  • 我们首先将参数存储在变量
    LETTERS
  • 然后我们将输出字符串初始化为空字符串
  • 然后执行一个循环,将
    LETTERS
    中的第一个字母以正确的格式追加到
    OUTPUT
    (如果
    OUTPUT
    不为空,则在前面加一个逗号),并从
    LETTERS
    中删除该字母
  • 字母
    为空时,我们退出循环并打印结果
  • 只是为了好玩,与PowerShell功能相同:

    function Get-LetterList([string]$Letters) {
      ([char[]]$Letters | ForEach-Object { "'$_'" }) -join ','
    }
    
    其实相当简单:

    @echo off
    set "LETTERS=%~1"
    set OUTPUT=
    
    if not defined LETTERS goto usage
    
    :loop
      if defined OUTPUT set "OUTPUT=%OUTPUT%,"
      set "OUTPUT=%OUTPUT%'%LETTERS:~0,1%'"
      set "LETTERS=%LETTERS:~1%"
      if defined LETTERS goto loop
    
    echo.%OUTPUT%
    goto :eof
    
    :usage
    echo Please pass a few letters as argument, e.g.
    echo.  %~0 ABC
    goto :eof
    
    让我们来仔细分析一下:

  • 我们首先将参数存储在变量
    LETTERS
  • 然后我们将输出字符串初始化为空字符串
  • 然后执行一个循环,将
    LETTERS
    中的第一个字母以正确的格式追加到
    OUTPUT
    (如果
    OUTPUT
    不为空,则在前面加一个逗号),并从
    LETTERS
    中删除该字母
  • 字母
    为空时,我们退出循环并打印结果
  • 只是为了好玩,与PowerShell功能相同:

    function Get-LetterList([string]$Letters) {
      ([char[]]$Letters | ForEach-Object { "'$_'" }) -join ','
    }
    
    其实相当简单:

    @echo off
    set "LETTERS=%~1"
    set OUTPUT=
    
    if not defined LETTERS goto usage
    
    :loop
      if defined OUTPUT set "OUTPUT=%OUTPUT%,"
      set "OUTPUT=%OUTPUT%'%LETTERS:~0,1%'"
      set "LETTERS=%LETTERS:~1%"
      if defined LETTERS goto loop
    
    echo.%OUTPUT%
    goto :eof
    
    :usage
    echo Please pass a few letters as argument, e.g.
    echo.  %~0 ABC
    goto :eof
    
    让我们来仔细分析一下:

  • 我们首先将参数存储在变量
    LETTERS
  • 然后我们将输出字符串初始化为空字符串
  • 然后执行一个循环,将
    LETTERS
    中的第一个字母以正确的格式追加到
    OUTPUT
    (如果
    OUTPUT
    不为空,则在前面加一个逗号),并从
    LETTERS
    中删除该字母
  • 字母
    为空时,我们退出循环并打印结果
  • 只是为了好玩,与PowerShell功能相同:

    function Get-LetterList([string]$Letters) {
      ([char[]]$Letters | ForEach-Object { "'$_'" }) -join ','
    }
    
    其实相当简单:

    @echo off
    set "LETTERS=%~1"
    set OUTPUT=
    
    if not defined LETTERS goto usage
    
    :loop
      if defined OUTPUT set "OUTPUT=%OUTPUT%,"
      set "OUTPUT=%OUTPUT%'%LETTERS:~0,1%'"
      set "LETTERS=%LETTERS:~1%"
      if defined LETTERS goto loop
    
    echo.%OUTPUT%
    goto :eof
    
    :usage
    echo Please pass a few letters as argument, e.g.
    echo.  %~0 ABC
    goto :eof
    
    让我们来仔细分析一下:

  • 我们首先将参数存储在变量
    LETTERS
  • 然后我们将输出字符串初始化为空字符串
  • 然后执行一个循环,将
    LETTERS
    中的第一个字母以正确的格式追加到
    OUTPUT
    (如果
    OUTPUT
    不为空,则在前面加一个逗号),并从
    LETTERS
    中删除该字母
  • 字母
    为空时,我们退出循环并打印结果
  • 只是为了好玩,与PowerShell功能相同:

    function Get-LetterList([string]$Letters) {
      ([char[]]$Letters | ForEach-Object { "'$_'" }) -join ','
    }
    

    下面的批处理文件使用了我借用的一个有趣的技巧,即通过
    cmd/U
    (在字符之间插入零字节)将Ascii(1字节)字符转换为Unicode 2字节字符,然后通过
    find
    命令将零字节拆分为单独的行:

    @echo off
    setlocal EnableDelayedExpansion
    
    set "output="
    for /F "delims=" %%a in ('cmd /D /U /C echo %~1^| find /V ""') do (
       set "output=!output!,'%%a'"
    )
    set output="%output:~1%"
    echo %output%
    

    下面的批处理文件使用了我借用的一个有趣的技巧,即通过
    cmd/U
    (在字符之间插入零字节)将Ascii(1字节)字符转换为Unicode 2字节字符,然后通过
    find
    命令将零字节拆分为单独的行:

    @echo off
    setlocal EnableDelayedExpansion
    
    set "output="
    for /F "delims=" %%a in ('cmd /D /U /C echo %~1^| find /V ""') do (
       set "output=!output!,'%%a'"
    )
    set output="%output:~1%"
    echo %output%
    

    下面的批处理文件使用了我借用的一个有趣的技巧,即通过
    cmd/U
    (在字符之间插入零字节)将Ascii(1字节)字符转换为Unicode 2字节字符,然后通过
    find
    命令将零字节拆分为单独的行:

    @echo off
    setlocal EnableDelayedExpansion
    
    set "output="
    for /F "delims=" %%a in ('cmd /D /U /C echo %~1^| find /V ""') do (
       set "output=!output!,'%%a'"
    )
    set output="%output:~1%"
    echo %output%
    

    下面的批处理文件使用了我借用的一个有趣的技巧,即通过
    cmd/U
    (在字符之间插入零字节)将Ascii(1字节)字符转换为Unicode 2字节字符,然后通过
    find
    命令将零字节拆分为单独的行:

    @echo off
    setlocal EnableDelayedExpansion
    
    set "output="
    for /F "delims=" %%a in ('cmd /D /U /C echo %~1^| find /V ""') do (
       set "output=!output!,'%%a'"
    )
    set output="%output:~1%"
    echo %output%
    

    在参数已经被引用的情况下,应该使用
    设置“letter=%~1”
    。这确实是一个很好的观点。如果这是你唯一的抱怨,那么我至少做了一些正确的事情;-)@乔伊-太棒了。谢谢在参数已经被引用的情况下,应该使用
    设置“letter=%~1”
    。这确实是一个很好的观点。如果这是你唯一的抱怨,那么我至少做了一些正确的事情;-)@乔伊-太棒了。谢谢在参数已经被引用的情况下,应该使用
    设置“letter=%~1”
    。这确实是一个很好的观点。如果这是你唯一的抱怨,那么我至少做了一些正确的事情;-)@乔伊-太棒了。谢谢在参数已经被引用的情况下,应该使用
    设置“letter=%~1”
    。这确实是一个很好的观点。如果这是你唯一的抱怨,那么我至少做了一些正确的事情;-)@乔伊-太棒了。谢谢