簡體   English   中英

FOR / F在批處理文件中不適用於逗號分隔的雙引號字符串

[英]FOR /F is not working for Comma separated double quoted string in batch file

我在分割包含用逗號分隔的雙引號字符串的行時遇到麻煩。 字符串看起來像:

"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等的代字號從每個令牌中去除引號。 如果您有意將引號保留為變量值的一部分,請刪除波浪號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM