我正在嘗試在批處理腳本中執行此操作,該操作應該很簡單,但花費了幾個小時後,我就不再接近解決方案了。批處理腳本在扭曲的字符串中查找字符串
如果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 - 真棒。謝謝! –