在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