2013-12-12 89 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% 
相關問題