批处理脚本以字符串形式查找字符串

时间:2013-12-12 10:29:17

标签: windows batch-file

我正在尝试在批处理脚本中执行此操作,这应该很简单,但在花了几个小时之后我就不再接近解决方案。

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

MYTEST.CMD ABCDEF

我想创建一个如下所示的字符串:

'A','B','C','D','E','F'

就像他们在CMD行中输入一样:

MYTEST.CMD "'A','B','C','D','E','F'"

2 个答案:

答案 0 :(得分:3)

相当简单,实际上:

@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

让我们稍微剖析一下:

  1. 我们首先将参数存储在变量LETTERS
  2. 然后我们将输出字符串初始化为空字符串。
  3. 然后是一个循环,以适当的格式将LETTERS的第一个字母附加到OUTPUT(如果OUTPUT不为空,则使用逗号)并从{{LETTERS中删除该字母1}}。
  4. LETTERS为空时,我们退出循环并打印结果。
  5. 只是为了它的乐趣,与PowerShell功能相同:

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

答案 1 :(得分:0)

下面的批处理文件使用了我从this post借来的有趣技巧,它通过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%