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

乔斯·乔斯佩

我在分割包含用逗号分隔的双引号字符串的行时遇到麻烦。字符串看起来像:

"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 /ffor没有任何开关的情况下,无论如何都将评估类似于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等,围绕每个令牌引号条。如果您有意将引号保留为变量值的一部分,请删除波浪号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

/ f循环的“令牌和分隔符”不适用于变量(批处理文件)

来自分类Dev

字符串不适用于双引号和单引号

来自分类Dev

在Windows批处理文件中,如何使用具有多个带引号的字符串的命令执行FOR / F

来自分类Dev

从批处理文件中的字符串中删除引号“”

来自分类Dev

如何在批处理文件中将多行命令输出转换为逗号分隔的字符串

来自分类Dev

如何将双引号应用于逗号空格分隔字符串中的每个值?

来自分类Dev

从Task Scheduler运行批处理文件不适用于Java命令

来自分类Dev

PHP解析逗号分隔的字符串,带双引号

来自分类Dev

如何使用逗号分隔符写入文件并且字符串中没有双引号?

来自分类Dev

字符串令牌生成器:按逗号分隔字符串,并忽略双引号中的逗号

来自分类Dev

在批处理文件中串联字符串

来自分类Dev

批处理文件中的字符串替换问题

来自分类Dev

批处理文件中的Concat字符串

来自分类Dev

批处理文件中的子字符串帮助

来自分类Dev

为什么字符串插值只适用于双引号 PHP

来自分类Dev

C中的HashTable不适用于字符串

来自分类Dev

在批处理字符串中使用双引号

来自分类Dev

字符串比较似乎不适用于从文件中读取的行

来自分类Dev

字符串连接不适用于逗号字符

来自分类Dev

在批处理文件中在分隔符的最后一个实例之后提取字符串

来自分类Dev

如何处理csv字符串中的双引号和逗号?

来自分类Dev

正则表达式使用拆分逗号分隔的字符串忽略双引号中的逗号

来自分类Dev

批处理文件文件输出,字符串处理

来自分类Dev

将Java中的字符串传递到批处理文件中以用于其他目的

来自分类Dev

在Windows批处理文件中查找包含子字符串的字符串

来自分类Dev

批处理文件从位置到长度的字符串中获取子字符串

来自分类Dev

双引号不适用于使用命令提示符中的空格调用文件夹

来自分类Dev

批处理文件在FOR循环中使用特殊字符和引号对字符串进行处理

来自分类Dev

批处理文件多行命令带有双引号

Related 相关文章

  1. 1

    / f循环的“令牌和分隔符”不适用于变量(批处理文件)

  2. 2

    字符串不适用于双引号和单引号

  3. 3

    在Windows批处理文件中,如何使用具有多个带引号的字符串的命令执行FOR / F

  4. 4

    从批处理文件中的字符串中删除引号“”

  5. 5

    如何在批处理文件中将多行命令输出转换为逗号分隔的字符串

  6. 6

    如何将双引号应用于逗号空格分隔字符串中的每个值?

  7. 7

    从Task Scheduler运行批处理文件不适用于Java命令

  8. 8

    PHP解析逗号分隔的字符串,带双引号

  9. 9

    如何使用逗号分隔符写入文件并且字符串中没有双引号?

  10. 10

    字符串令牌生成器:按逗号分隔字符串,并忽略双引号中的逗号

  11. 11

    在批处理文件中串联字符串

  12. 12

    批处理文件中的字符串替换问题

  13. 13

    批处理文件中的Concat字符串

  14. 14

    批处理文件中的子字符串帮助

  15. 15

    为什么字符串插值只适用于双引号 PHP

  16. 16

    C中的HashTable不适用于字符串

  17. 17

    在批处理字符串中使用双引号

  18. 18

    字符串比较似乎不适用于从文件中读取的行

  19. 19

    字符串连接不适用于逗号字符

  20. 20

    在批处理文件中在分隔符的最后一个实例之后提取字符串

  21. 21

    如何处理csv字符串中的双引号和逗号?

  22. 22

    正则表达式使用拆分逗号分隔的字符串忽略双引号中的逗号

  23. 23

    批处理文件文件输出,字符串处理

  24. 24

    将Java中的字符串传递到批处理文件中以用于其他目的

  25. 25

    在Windows批处理文件中查找包含子字符串的字符串

  26. 26

    批处理文件从位置到长度的字符串中获取子字符串

  27. 27

    双引号不适用于使用命令提示符中的空格调用文件夹

  28. 28

    批处理文件在FOR循环中使用特殊字符和引号对字符串进行处理

  29. 29

    批处理文件多行命令带有双引号

热门标签

归档