Чтение пустых значений в команде «for» в командном файле Windows - PullRequest
1 голос
/ 26 августа 2010

У меня вопрос к пакетной команде "for" в windows.

У меня есть файл с именем keys.txt, который содержит эту строку.

ключ, значение, x86, windows7

Я хочу проанализировать эту строку и сохранить 4 разделенные запятыми переменные в 4 переменных. Я выполняю это с помощью следующего пакетного сценария Windows.

 for /F "tokens=1,2,3,4* delims=," %%i
 in (keys.txt) do (

    echo first is %%i

    echo second is %%j

    echo third is %%k

    echo fourth is %%l

    echo rest is %%m

    echo -------------  

 )

Однако, когда я изменяю keys.txt на

ключ, значение ,, windows7

Третья переменная печатается как windows7. Я ожидаю, что третья переменная будет пустой, а четвертая переменная будет windows7. Если я дам пробел между двумя запятыми, как это

ключ, значение,, windows7

Затем печатается 3-я переменная как пустая, а 4-я переменная как Windows7.

Кто-нибудь знает, как сделать так, чтобы предыдущий случай (т. Е. Без пробела) также работал правильно?

1 Ответ

4 голосов
/ 26 августа 2010

Попробуй это. Идея от здесь
Сценарий предварительно обрабатывает каждую строку, присваивая текст # NUL # каждому пустому слоту. После этого вы можете игнорировать значения # NUL #.

cls
setlocal enabledelayedexpansion
@echo off
for /f "tokens=*" %%X in (keys.txt) do (
    set "work=%%X"
    :: fill empty fields with "#NUL#" ...
    :: but do it twice, just in case consecutive fields are empty
    for /l %%i in (1,1,2) do set "work=!work:,,=,#NUL#,!"
    for /F "tokens=1,2,3,4* delims=," %%i in ("!work!") do (
echo first is %%i
echo second is %%j
echo third is %%k
echo fourth is %%l
echo rest is %%m
echo -------------  
))

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...