Windows 批处理脚本在带有扭曲的字符串中查找字符串
我试图在批处理脚本中实现这一点,这应该很简单,但在花了几个小时之后,我还没有找到解决方案 如果CMD参数包含一系列字母,我想用单引号将每个字母括起来,并用逗号分隔。例如,如果用户输入以下内容: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
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
中删除该字母字母
为空时,我们退出循环并打印结果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
中删除该字母字母
为空时,我们退出循环并打印结果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
中删除该字母字母
为空时,我们退出循环并打印结果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
中删除该字母字母
为空时,我们退出循环并打印结果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”
。这确实是一个很好的观点。如果这是你唯一的抱怨,那么我至少做了一些正确的事情;-)@乔伊-太棒了。谢谢