2013-12-12 93 views
0

我正在尝试在批处理脚本中执行此操作,该操作应该很简单,但花费了几个小时后,我就不再接近解决方案了。批处理脚本在扭曲的字符串中查找字符串

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

MYTEST.CMD ABCDEF 

我想创建一个字符串,它看起来像这样:

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

一样的,如果他们在CMD行中输入如下:

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

回答

4

相当容易,实际上是:

@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中删除该字母。
  4. LETTERS为空时,我们退出循环并打印结果。

而只是为了好玩,同一个PowerShell功能:

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

应该使用'设置“信=%〜1”'如果是论据已经被引用。 – dbenham

+1

好点,的确如此。如果这是你唯一的投诉,那么我至少做了一些事情;-) – Joey

+0

@Joey - 真棒。谢谢! –

0

批处理文件下方用一个有趣的把戏我从this post该转换ASCII码借用(1字节)字符成Unicode 2个字节字符经由cmd /U(插入字符之间的零字节),然后经由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% 
相关问题