Batch file 将param文件中的双引号转义到批处理脚本

Batch file 将param文件中的双引号转义到批处理脚本,batch-file,Batch File,我有以下批处理脚本: 从网上复制的。需要帮助根据我的要求修改脚本 @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

我有以下批处理脚本:

从网上复制的。需要帮助根据我的要求修改脚本

@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
我有以下提要文件,作为上述批处理脚本的参数提供

aa"aaaaa|bbbbbbbb|cccccc
ddddddd|eeeeeeee|ffffff
ggggggg|hhhhhhhh|iiiiii
jjjjjjj|kkkkkkkk|llllll
mmmmmmm|nnnnnnnn|oooooo
请注意,提要文件有双引号。当我尝试运行批处理脚本时,这会中断脚本。请帮忙。请帮助处理其他特殊字符


此外,上面的脚本对第一行的处理与其他行不同。我希望它把第一行也当作其他行。请帮忙,我想这会满足你的期望的。这是一个批处理+Jscript混合脚本。JScript读取stdin并响应stdout比纯批处理更能容忍特殊字符。使用
.bat
扩展名保存它,并通过以下任一方法运行它:

parser.bat feedfile.txt

parser.bat

键入feedfile.txt | parser.bat

feedgenerator.exe | parser.bat

parser.bat
(然后将内容粘贴到控制台中。在空行中按Enter键停止。)

这是剧本

@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();
}
@if(@a==@b)@end/*
::批量部分
@回音
setlocal
如果存在“%~1”(
cscript/nologo/e:jscript“%$f0”<“%$1”
)否则(
cscript/nologo/e:jscript“%~f0”
)
退出/b
::JScript部分*/
而(!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
C:\Users\me\Desktop>test.bat

它似乎也适用于百分比、符号、克拉以及我能想到的其他任何东西。

一旦我删除IF''%linenum%'=“1”“GOTO picknames”,脚本没有输出。感谢rojo,它按预期工作。。。我想它可以处理所有的特殊字符。再次感谢。作为上述内容的继续,我需要调用一个.vbs文件。该文件从指定文件下载其他文件。@user646108-对不起,我不知道你在问什么,甚至不知道你在问什么。我想你是的,但是你的评论太模糊了,很难说。嗨,罗乔,因为评论的空间少了,我提出了一个新问题