我希望有人可以提供帮助。
Dropbox将其路径存储在名为' info.json'的文件中。我的文件内容如下:
{"personal": {"path": "C:\\Users\\Sam\\Dropbox", "host": 241656592}}
{"business": {"path": "C:\\Common\\Allusers\\Dropbox", "host": 45143292}}
我需要提取个人'仅使用Windows批处理脚本仅路径到Windows CMD变量%dropboxpath%。我尝试过使用FOR和FINDSTR,但无法使其正常工作。
另一个问题是剥离路径中的额外反斜杠以离开' C:\ Users \ Sam \ Dropbox'。
我相信FINDSTR应该找到个人' line和FOR应该在" path"之后提取所有内容,但之前," host"然后以某种方式,删除双反斜杠。
希望这是有道理的,非常感谢你能给予的任何帮助。
非常感谢,Sam
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
FOR /f "tokens=1,3*delims={:" %%a IN (q29817666.txt) DO IF /i "%%~a"=="personal" (
FOR %%p IN (%%c) DO SET "dropboxpath=%%~p"&GOTO process
)
:process
SET "dropboxpath=%dropboxpath:\\=\%"
ECHO dropboxpath=%dropboxpath%
GOTO :EOF
我使用了一个名为q29817666.txt
的文件,其中包含我的测试数据。
令牌/分隔符组合选择"personal"
到%%a, a space to
%% b and
" C:\ Users \ Sam \ Dropbox"," host&# 34;:241656592}} to
%% c`
如果%%a
(去除了封闭引号)等于字符串personal
。
然后将%%c
处理为由空格和逗号分隔的一系列元素。由于第一个元素是感兴趣的并且它被引用,因此%%p
将获得"C:\\Users\\Sam\\Dropbox"
,并且这个被删除的封闭引号将被分配给变量dropbox
并且循环是然后由goto
终止。
然后用单个替换双反斜杠。完成。
答案 1 :(得分:1)
@echo off
setlocal enableextensions disabledelayedexpansion
set "file=info.json"
for /f usebackq^ tokens^=2^,6^ delims^=^" %%a in ("%file%") do (
if /i "%%a"=="personal" set "dropboxpath=%%~fb"
)
echo %dropboxpath%
使用引号作为分隔符,拆分该行,因此分隔符和标记
{"personal": {"path": "C:\\Users\\Sam\\Dropbox", "host": 241656592}}
^ ^ ^ ^ ^ ^ ^ ^
1 2 3 4 5 6 7 8 9
我们要求第四和第六个令牌进入%%a
和%%b
,如果%%a
是personal
,那么%%b
就是路径
或者,您可以尝试使用
@echo off
setlocal enableextensions disabledelayedexpansion
set "file=info.json"
for /f "delims=" %%a in ('findstr /l /i /c:"{\"personal\"" "%file%"'
) do for %%b in (%%a
) do for /f "tokens=4 delims=\:" %%c in ("%%~b"
) do set "dropboxpath=%%~fb"
echo %dropboxpath%
findstr
用于在输入文件中查找所需的行。此行由... for /f %%a
调用了findstr
命令。对于每条检索到的线路...... for %%b
将遍历%%a
中存储的行中的元素以及每个元素... for /f %%c
将使用冒号和反斜杠作为分隔符拆分元素,并尝试查找第4个令牌。作为具有四个令牌的行中唯一的元素是路径...... 答案 2 :(得分:0)
由于您需要在运行时而不是在解析时修改和评估变量,因此您需要使用EnableDelayedExpansion
和!...!
而不是%...%
。但是,如果您发布的两行是正确的,则此代码将起作用。
@ECHO OFF
SETLOCAL EnableDelayedExpansion
FOR /F "tokens=*" %%a IN (scanword.txt) DO (
SET line=%%a
IF "!line:~2,8!"=="personal" SET dropboxpath=%%a
)
FOR /F "tokens=3" %%a IN ("!dropboxpath!") DO (
SET dropboxpath=%%a
)
SET dropboxpath=!dropboxpath:"=!
SET dropboxpath=!dropboxpath:,=!
SET dropboxpath=!dropboxpath:\\=\!
ECHO !dropboxpath!
PAUSE
路径将存储在!dropboxpath!
而不是%dropboxpath%
,如您所要求的那样,但我希望没问题; - )