gpt4 book ai didi

regex - FOR/F 不适用于批处理文件中逗号分隔的双引号字符串

转载 作者:可可西里 更新时间:2023-11-01 09:58:43 27 4
gpt4 key购买 nike

我无法拆分包含用逗号分隔的双引号字符串的行。字符串看起来像:

"DevLoc","/Root/Docs/srvr/temp test","171.118.108.22","/Results/data/Procesos Batch","C:\DataExport\ExportTool\Winsock Folder DB","C:\Export\ExportTool\Temp Folder","22"

一些字符串值包含空格。我想将每个双引号字符串存储到一个变量中。谁能帮忙

下面是我的批处理脚本。变量“EnvDetails”包含上面需要解析的行。

FOR /F "tokens=1,2,3,4,5,6,7 delims=," %%i in ("%EnvDetails%") do (
SET TEMPS=%%i
SET Path=%%j
SET host=%%k
SET scriptPath=%%l
SET WINSP_HOME=%%m
SET PUTTY_HOME=%%n
SET portNum=%%o
@echo %TEMPS% > temp.txt
@echo %MPath% >> temp.txt
@echo %host% >> temp.txt
@echo %scriptPath% >> temp.txt
@echo %WINSCP_HOME% >> temp.txt
@echo %PUTTY_HOME% >> temp.txt
@echo %portNum% >> temp.txt
)

最佳答案

部分问题是您试图在设置变量值时在同一个带括号的代码块中检索变量值。因为 cmd 解释器在执行命令之前用它们的值替换变量,所以您基本上是将空值回显到 temp.txt。要等到变量被定义后再展开它们,您需要延迟展开。

但是您确实使事情变得比需要的更复杂。除了将变量回显到文本文件之外,您还对这些变量做了什么?

您应该做的是使用基本的 for 循环而不是 for/f。没有任何开关的 for 无论如何都会评估与 CSV 解析器类似的行,以逗号、分号、未加引号的空格和制表符等分隔。

鉴于您基本上是用逗号分隔一行并按顺序将每个标记回显到文本文件,每行一个标记,您可以像这样简化代码:

@echo off
>temp.txt (
for %%I in (%EnvDetails%) do echo %%~I
)

如果我弄错了,而您确实打算对数据进行进一步处理;如果您确实需要这些变量,那么这个例子演示了延迟扩展:

@echo off
setlocal

set EnvDetails="DevLoc","/Root/Docs/srvr/temp test","171.118.108.22","/Results/data/Procesos Batch","C:\DataExport\ExportTool\Winsock Folder DB","C:\Export\ExportTool\Temp Folder","22"

>temp.txt (
FOR /F "tokens=1-7 delims=," %%i in ("%EnvDetails%") do (
SET "TEMPS=%%~i"
SET "MPath=%%~j"
SET "host=%%~k"
SET "scriptPath=%%~l"
SET "WINSCP_HOME=%%~m"
SET "PUTTY_HOME=%%~n"
SET "portNum=%%~o"

setlocal enabledelayedexpansion
echo !TEMPS!
echo !MPath!
echo !host!
echo !scriptPath!
echo !WINSCP_HOME!
echo !PUTTY_HOME!
echo !portNum!
endlocal
)
)

最后的注意事项:%%~i%%~j 等波浪符号从每个标记中去掉周围的引号。如果您有意希望将引号保留为变量值的一部分,请删除波浪号。

关于regex - FOR/F 不适用于批处理文件中逗号分隔的双引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30217932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com