在Windows批處理腳本中,我需要將括號中包含用戶名和用戶標識的字符串以及括號中的非僱員狀態拆分爲逗號分隔的用戶標識列表。批處理腳本 - 用括號拆分字符串
設置輸入=斯通,傑克(非EMPL)(stonej),史密斯,約翰(smithj),能源部米爾頓,簡(doej)
OUTPUT = stonej,smithj,doej
可有人請幫助這個?
在Windows批處理腳本中,我需要將括號中包含用戶名和用戶標識的字符串以及括號中的非僱員狀態拆分爲逗號分隔的用戶標識列表。批處理腳本 - 用括號拆分字符串
設置輸入=斯通,傑克(非EMPL)(stonej),史密斯,約翰(smithj),能源部米爾頓,簡(doej)
OUTPUT = stonej,smithj,doej
可有人請幫助這個?
解決了這個問題 - 但是如果實際的任務是轉換一個文件,它將會改變。
這應該處理簡單批處理代碼會遇到問題的字符。
此使用名爲repl.bat
一個幫手批處理文件 - 下載來自:https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
將repl.bat
在同一文件夾中的批處理文件或者是道路上的一個文件夾中。
@echo off
set "input=Stone, Jake (non-empl) (stonej), Smith, John (smithj), Doe Milton, Jane (doej)"
for /f "delims=" %%a in ('echo "%input%,"^|repl "\(non-empl\)" "" ^|repl ".*?\((.*?)\).*?," "$1," ^|repl "..$" "" ') do set output=%%a
echo "%output%"
pause
這個完美的作品!我必須查看repl.bat的細節,但它的工作原理。萬分感謝! – user3462229
只是出於好奇...以上可以實現沒有repl.bat?我如何「提取」括號中的任何內容,而不知道無限字符串的標記號,而忽略(non-empl)? – user3462229
是的,但它不會像健壯,而是一個更大的腳本。 – foxidrive
@echo off
SET INPUT=Stone, Jake (non-empl) (stonej), Smith, John (smithj), Doe Milton, Jane (doej)
for /F "tokens=4,6,8 delims=()" %%a in ("%input%") do set OUTPUT=%%a,%%b,%%c
echo OUTPUT=%OUTPUT%
輸出:
OUTPUT=stonej,smithj,doej
謝謝Aacini。這僅適用於上述示例。但是,INPUT示例行僅僅是一種表示......實際上,它可以包含多達100個名稱和相應的ID。對不起,沒有提到。 – user3462229
這裏是一個天然的批處理文件解決方案
@echo off
setlocal enableDelayedExpansion
set "input=Stone, Jake (non-empl) (stonej), Smith, John (smithj), Doe Milton, Jane (doej)"
:: Define LF to contain a linefeed character
set ^"LF=^
^" Above empty line is critical - DO NOT REMOVE
:: Remove (non-empl) from data
set "input=!input:(non-empl)=!"
:: insert linefeed before (and after)
for %%L in ("!LF!") do (
set "input=!input:(=%%~L(!"
set "input=!input:)=)%%~L!"
)
:: Echo the value and pipe to FINDSTR to preserve lines containing (
:: Must delay expansion by escaping !, and use CMD /V:ON to re-enable delayed expansion
:: Use FOR /F to parse the result, discarding (and), and build output
for /f "delims=()" %%A in ('cmd /v:on /c echo ^^!input^^!^|findstr "("') do set output=!output!%%A,
:: Remove unwanted trailing , from output
set "output=!output:~0,-1!"
:: Show result
echo output=!output!
什麼是'非empl'的意義,我想你所期望的腳本過濾掉所有說'non-empl'的內容? – unclemeat
non-empl表示非員工身份,應該過濾掉。 – user3462229