我正在尝试在批处理脚本中执行此操作,该操作应该很简单,但花费了几个小时后,我就不再接近解决方案了。批处理脚本在扭曲的字符串中查找字符串
如果CMD参数包含一系列字母,我想用单引号括住每个字母,并用逗号分隔。例如,如果用户输入:
MYTEST.CMD ABCDEF
我想创建一个字符串,它看起来像这样:
'A','B','C','D','E','F'
一样的,如果他们在CMD行中输入如下:
MYTEST.CMD "'A','B','C','D','E','F'"
我正在尝试在批处理脚本中执行此操作,该操作应该很简单,但花费了几个小时后,我就不再接近解决方案了。批处理脚本在扭曲的字符串中查找字符串
如果CMD参数包含一系列字母,我想用单引号括住每个字母,并用逗号分隔。例如,如果用户输入:
MYTEST.CMD ABCDEF
我想创建一个字符串,它看起来像这样:
'A','B','C','D','E','F'
一样的,如果他们在CMD行中输入如下:
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
中删除该字母。LETTERS
为空时,我们退出循环并打印结果。而只是为了好玩,同一个PowerShell功能:
function Get-LetterList([string]$Letters) {
([char[]]$Letters | ForEach-Object { "'$_'" }) -join ','
}
批处理文件下方用一个有趣的把戏我从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%
应该使用'设置“信=%〜1”'如果是论据已经被引用。 – dbenham
好点,的确如此。如果这是你唯一的投诉,那么我至少做了一些事情;-) – Joey
@Joey - 真棒。谢谢! –