我正在尝试读取文本文件的内容,并将每行上找到的任何路径存储到自己的变量中。每行只有一条路径,每行还有其他文字(双引号,数字和标签)。
这甚至可能吗?我花了大约6个小时搜索Bing和谷歌试图找出我是否可以做到这一点,我没有找到任何东西。
以下是文本文件的示例:
"LibraryFolders"
{
"1" "D:\\Steam Games"
"2" "E:\\Steam Games"
}
列出的库文件夹数量和库文件夹的路径对于每个用户的计算机都不同。
答案 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)
您知道,该数据文件看起来像
@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]);
}