我正在尝试在批处理脚本中执行此操作,这应该很简单,但在花了几个小时之后我就不再接近解决方案。
如果CMD参数包含一系列字母,我想用单引号括住每个字母并用逗号分隔。例如,如果用户输入:
MYTEST.CMD ABCDEF
我想创建一个如下所示的字符串:
'A','B','C','D','E','F'
就像他们在CMD行中输入一样:
MYTEST.CMD "'A','B','C','D','E','F'"
答案 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
让我们稍微剖析一下:
LETTERS
。LETTERS
的第一个字母附加到OUTPUT
(如果OUTPUT
不为空,则使用逗号)并从{{LETTERS
中删除该字母1}}。LETTERS
为空时,我们退出循环并打印结果。只是为了它的乐趣,与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%