批量从文本文件中的随机行中提取变量,然后根据该数字从另一个变量中提取变量

时间:2018-03-16 13:36:16

标签: batch-file

我正在尝试创建一个批处理文件,通过选择随机行从一个文本文件中选择一个变量,然后将整行设置为变量。然后,它使用先前生成的相同行号设置第二个变量,以选择第一个变量以从第二个文本文件设置第二个变量。示例:如果批处理文件随机选择test1.txt的第4行作为变量,则会选择test2.txt的第4行作为变量。

两个文本文件中的变量是相关的,我想不出让批处理文件读取文本文件的一行并从中获取两个变量的方法。 (特别是当一个是文本字符串而另一个是数字时。)

我发现这段代码可以从文本文件中随机抽取一行,然后将其存储为变量。

@echo off
setlocal EnableDelayedExpansion
set INPUT_FILE="test1.txt"

:: # Count the number of lines in the text file and generate a random number
for /f "usebackq" %%a in (`find /V /C "" ^< %INPUT_FILE%`) do set lines=%%a
set /a randnum=%RANDOM% * lines / 32768 + 1, skiplines=randnum-1

:: # Extract the line from the file
set skip=
if %skiplines% gtr 0 set skip=skip=%skiplines%
for /f "usebackq %skip% delims=" %%a in (%INPUT_FILE%) do set "randline=%%a" 
set line=!randline!

如果运行此选项,它将返回test1.txt内随机选择的行中存在的整个字符串。但我不能为我的生活找到一种方法来存储变量%skiplines%,然后使用它来从test2.txt中提取另一个变量。

我尝试过几件事。最值得注意的是:

set /a "line = 0"
for /f "tokens=2 delims= " %%a in (test2.txt) do (
set /a "line = line + 1"
if !line!==%skiplines% set thing=%%a

运行此操作时,批处理文件处理会立即退出,或者如果它到达输出,则会显示Echo is off而不是应该来自test2.txt的输出。我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

要更正您的示例代码,您需要

for /f "usebackq %skip% delims=" %%a in (%INPUT_FILE%) do set "randline=%%a"&GOTO FOUNDLINE1
:FOUNDLINE1
set line=%randline%

虽然为什么你希望设置line当你显然想要的dta在randline时对我来说是一个谜。我使用

for /f "usebackq %skip% delims=" %%a in (%INPUT_FILE%) do set "line=%%a"&GOTO FOUNDLINE1
:FOUNDLINE1

要从第二个文件中选择相同的行号,代码将为

for /f "usebackq %skip% delims=" %%a in (%INPUT_FILE2%) do set "line2=%%a"&GOTO FOUNDLINE2
:FOUNDLINE2

但是,由于你没有给出文件内容的指示或者你给出的文件内容你想要的东西,更多的是推测。

您还没有在第二个代码段中显示右括号。如果丢失,Batch将对象并终止。