我需要以批处理代码解析文件。我的文件中有两条信息。
这些分别写到文件中。
在我的批处理脚本中,我需要读取文件并将两行放入两个不同的变量(src_dir,tgt_dir)。如果使用制表符或分隔符会更好,我可以更改定界符。
我正在阅读有关使用for /f etc
的信息,但我不知道它是如何工作的。谢谢您的指点。
set "src_dir="
set "tgt_dir="
for /f "tokens=* usebackq" %%a in ("c:\somewhere\myfile.txt") do (
if not defined src_dir (
set "src_dir=%%~a"
) else if not defined tgt_dir (
set "tgt_dir=%%~a"
)
)
echo %src_dir%
echo %tgt_dir%
在for
中,/f
表示将要处理文件内容或命令输出。
[tokens=*
向for
命令指示不应在行上进行拆分。
[usebackq
向for
命令指示加引号的字符串是要执行的命令,而带引号的字符串是要读取的文件。
对于读取的每一行,将执行括号中的代码,以确定两个变量中的哪一个应接收读取的值。
FOR / F在这种情况下不是最佳选择。我将解决以下问题:
<"yourFile.txt" (
set /p "src_dir="
set /p "tgt_dir="
)
:: Show result
echo src_dir=%src_dir%
echo tgt_dir=%tgt_dir%
如果值之间有空行,则必须为每个空行添加一个额外的set /p =
,以便跳过该行。
此方法和MC ND解决方案的一个缺点是值必须按特定顺序排列。如果您可以控制数据文件的创建,则可以创建一个更简单,更可靠的解决方案。
只需用varname=
预指定每个值。例如,您的数据文件代码看起来像
src_dir=path1
tgt_dir=path2
然后,您可以使用以下非常简单的脚本来读取值。如果添加其他变量,则不必更改脚本。
for /f "usebackq delims=" %%A in ("pathSpecForYourDataFile") do set "%%A"
您需要做的是解析批处理代码,并将其读入2个变量中