批处理文件:从文本文件中读取路径并将每个实例存储为新变量?

时间:2014-12-24 01:08:58

标签: batch-file batch-processing

我正在尝试读取文本文件的内容,并将每行上找到的任何路径存储到自己的变量中。每行只有一条路径,每行还有其他文字(双引号,数字和标签)。

这甚至可能吗?我花了大约6个小时搜索Bing和谷歌试图找出我是否可以做到这一点,我没有找到任何东西。

以下是文本文件的示例:

"LibraryFolders"
{
  "1"       "D:\\Steam Games"
  "2"       "E:\\Steam Games"
}

列出的库文件夹数量和库文件夹的路径对于每个用户的计算机都不同。

2 个答案:

答案 0 :(得分:3)

@ECHO OFF
SETLOCAL
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
FOR /f "tokens=1*" %%a IN (q27630202.txt) DO (
 IF "%%~b" neq "" SET "$%%~a=%%~b"
)
SET $

GOTO :EOF

我使用了一个名为q27630202.txt的文件,其中包含我的测试数据。

答案 1 :(得分:1)

您知道,该数据文件看起来像一样。只是为了笑嘻嘻,我决定将它加载到JScript中,将其按入有效的JSON,从中创建一个JScript对象,然后将对象值输出回批处理脚本。它不如Magoo的解决方案那么高效,但它仍然是一种有趣的练习。

@if (@a==@b) @end /* Harmless hybrid line that begins a JScript comment
@echo off
setlocal

set "JSON=json.txt"

for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%JSON%"') do (
    rem :: If you want to do stuff with each path returned,
    rem :: change "delims=" to "tokens=2 delims==" above.
    rem :: Then for each iteration of the loop, %%I will
    rem :: contain a path from the text file.
    set "%%I"
)

:: display all variables beginning with LibraryFolders
set LibraryFolders

goto :EOF

:: end batch / begin JScript */

var fso = new ActiveXObject('scripting.filesystemobject'),
    JSONfile = fso.OpenTextFile(WSH.Arguments(0), 1);

var JSON = JSONfile.ReadAll().split(/\r?\n/);
JSONfile.close();

// massage the data into valid JSON
for (var i=0; i<JSON.length; i++) {
    if (!i) JSON[i] += ':';
    else if (/^\s*(\"[^\"]+\"\s*){2}$/.test(JSON[i])) {
        JSON[i] = JSON[i].replace(/\"\s+\"/, '": "') + ',';
    }
}
JSON = JSON.join('').replace(/,\s*\}/, '}');

// create new object from now valid JSON text
eval('var obj = {' + JSON + '}');

// dump "var=val" out to be captured by batch for /f loop
for (var i in obj.LibraryFolders) {
    WSH.Echo('LibraryFolders['+i+']=' + obj.LibraryFolders[i]);
}