识别或删除批处理脚本文本流或文件中的双引号字符

identify or delete double quote char in batch script text stream or in a file

我已经创建了命令脚本来读取 file 中的 %N% 行。问题是当我处理文件的文本时,我无法从所有文本流的任何地方删除 "" 删除是非常必要的,因为如果文件的文本行有像 "text"text 这样的子字符串有特殊字符或更糟的脚本代码,那么脚本会崩溃或无法正常工作(包括脚本由专门编写 text).
的程序员控制捕获 如果我无法从文本流中删除 ",那么我只想确定 file(或者它的第一个 %N% 行,包括空行)包含在至少一个 " 个字符。
感谢任何想法,包括任何 file 预处理。但主要目标是脚本速度。

for /f "skip=2 delims=" %%a in ('find /v /n "" "file" 2^>nul') do set "v=%%a"&call :v&if not errorlevel 1 goto FURTHER1
goto FURTHER2
:v
for /f "delims=[]" %%a in ("%v%") do set "line%%a=%v:*]=%"&if %%a lss %N% (exit /b 1) else exit /b 0
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q39558311.txt"
SET "tempfilename1=%sourcedir%\q39558311#.txt"
>"%tempfilename1%" ECHO("
SET /a linefound=0
FOR /f "tokens=1 delims=:" %%a IN ('findstr /n /g:"%tempfilename1%" "%filename1%"') DO (
 IF %%a gtr 2 SET /a linefound=%%a&GOTO report
)
:report
ECHO quote found AT line %linefound%
DEL "%tempfilename1%"
GOTO :EOF

您需要更改 sourcedirfilename1 的设置以适合您的情况。

tempfile1 可以是任何名称——它只是一个临时文件;为了方便起见,我选择了那个特定的名称。

我使用了一个名为 q39558311.txt 的文件,其中包含一些用于测试的虚拟数据。

本质上,创建一个在单行上包含单引号的文件 *tempfile1) 然后使用 findstr/g:filename 选项来读入要查找的目标字符串。当 findstr 找到该行时,它对其进行编号并输出 line_number:line found。以:为分隔符,此行的token 1为行号。

我不明白你为什么要在代码中使用 skip=number。您打算跳过测试目标文件的前两行吗?

IF %%a gtr 2 测试找到的行号。如果大于 2,则设置变量 linefound 并终止 for 循环。

我选择将 linefound 初始化为零。如果在第 2..end 行中没有找到 ",它将保持为零。同样,您可以清除它,然后它将被定义(first-line-found-with-quote-greater than-2 的值)并且没有定义未找到。

我只能识别",不能删除。等待您的建议!

>nul 2>&1 findstr /m \" "file"
if not errorlevel 1 echo double quote found!