我有以下批处理脚本:
从互联网上复制。需要帮助根据我的要求修改脚本。
@ECHO OFF
IF "%~1"=="" GOTO :EOF
SET "filename=%~1"
SET fcount=0
SET linenum=0
FOR /F "usebackq tokens=1-30 delims=|" %%a IN ("%filename%") DO ^
CALL :process "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h" "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o" "%%p" "%%q" "%%r" "%%s" "%%t" "%%u" "%%v" "%%w" "%%x" "%%y" "%%z" "%%?" "%%_" "%%@" "%%\"
GOTO :EOF
:trim
SET "tmp=%~1"
:trimlead
IF NOT "%tmp:~0,1%"==" " GOTO :EOF
SET "tmp=%tmp:~1%"
GOTO trimlead
:process
SET /A linenum+=1
IF "%linenum%"=="1" GOTO picknames
SET ind=0
:display
IF "%fcount%"=="%ind%" (ECHO.&GOTO :EOF)
SET /A ind+=1
CALL :trim %1
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO !tmp!
ENDLOCAL
SHIFT
GOTO display
:picknames
IF %1=="" GOTO :EOF
CALL :trim %1
SET /a fcount+=1
echo %tmp%
SET "f%fcount%=%tmp%"
SHIFT
GOTO picknames
我有以下Feed文件作为参数提供给上面的批处理脚本。
aa"aaaaa|bbbbbbbb|cccccc
ddddddd|eeeeeeee|ffffff
ggggggg|hhhhhhhh|iiiiii
jjjjjjj|kkkkkkkk|llllll
mmmmmmm|nnnnnnnn|oooooo
请注意,Feed文件有双引号。当我尝试运行批处理脚本时,这会破坏脚本。请帮助。请帮助处理其他特殊字符。
此外,上面的脚本将第一行与其他行区别对待。我希望它将第一行视为任何其他行。请帮忙
答案 0 :(得分:2)
这会做你所期望的我想的。这是一个批处理+ Jscript混合脚本。与纯批处理相比,JScript读取stdin和回显到stdout对特殊字符的容忍度要高得多。使用.bat
扩展名保存并通过以下任一方法运行它:
parser.bat feedfile.txt
parser.bat < feedfile.txt
type feedfile.txt | parser.bat
feedgenerator.exe | parser.bat
parser.bat
(然后将内容粘贴到控制台中。点击 在空白行中输入 停止。)
这是剧本。
@if (@a==@b) @end /*
:: batch portion
@ECHO OFF
setlocal
if exist "%~1" (
cscript /nologo /e:jscript "%~f0" < "%~1"
) else (
cscript /nologo /e:jscript "%~f0"
)
exit /b
:: JScript portion */
while (!WSH.StdIn.AtEndOfLine) {
var line=WSH.StdIn.ReadLine();
WSH.Echo(line.split('|').join('\r\n'));
WSH.Echo();
}
示例输出:
C:\Users\me\Desktop>test.bat < test.txt
aa"aaaaa
bbbbbbbb
cccccc
ddddddd
eeeeeeee
ffffff
ggggggg
hhhhhhhh
iiiiii
jjjjjjj
kkkkkkkk
llllll
mmmmmmm
nnnnnnnn
oooooo
它似乎与百分比,&符号,克拉以及我能想到的任何其他东西一样好用。