0

您好,我正在尝试完成我正在处理的批处理文件。

我有一个励志名言文本文件库,我希望我的批处理文件选择一个随机引用文本文件并将其显示在命令窗口中。我猜是命令类型。

我带引号的文件夹的路径是:

 C:\Users\niv\Documents\test\scripts\quotes

里面有:

      Quote 1.txt
      Quote 2.txt
      Quote 3.txt.

我做了命令:`type "C:\Users\niv\Documents\test\scripts\quotes\quote1.txt" 只显示了选定的quote1.txt ofcourse。

如果可能的话,我想让选定的引用文本文件成为一个变量,这样我就可以将它用于我的批处理文件中的不同任务,例如:

收到选定的报价后,使用程序执行此命令,使我的计算机可以读取“”之后的任何内容。像这样

%speech% "%quotes%"

%speech% 让我的电脑说出引号内的内容。

我希望你能理解我在这里想要完成的事情,如果不只是问:)

4

3 回答 3

2

我假设每个引用都包含在每个文件的一行中。我建议将所有引号放在一个名为quotes.txt 的文件中,每行一个引号。这应该更容易维护报价。然后,您需要的只是计算文件中行数的代码,然后随机选择 1 和 count 之间的行。

FIND /C 命令可以计算文件中的行数。

动态变量给出 0 到 32767 之间的%RANDOM%伪随机数,模 SET /A 运算符可用于将该值转换为 0 到 count-1 之间的数字。

FOR /F 命令从文件中读取行,您可以使用 SKIP 选项跳过随机数量的行。

引号.txt

quote 1
quote 2
quote 3
quote 4

randomQuote.bat

@echo off
setlocal

:: Count the number of quotes and define a random number to skip
for /f %%N in ('find /c /v "" ^<quotes.txt') do set /a skip=%random% %% %%N
if %skip% gtr 0 (set skip=skip=%skip%) else set "skip="

:: Read a random quote into a variable
for /f "%skip% delims=" %%A in (quotes.txt) do (
  set "quote=%%A"
  goto :break
)
:break

:: Echo the quote (or do whatever you need)
echo %quote%
于 2012-10-16T22:05:40.867 回答
0

您可以将文本文件读入如下变量:

setlocal EnableDelayedExpansion

set filename=Quote 1.txt
for /f "tokens=*" %%a in ('type "%filename%"') do (
  set quote=!quote!%%a^

)

echo !quote!

endlocal

后跟一个空行的尾随^以换行符结束每个附加的行。set quote=!quote!%%a^如果您不需要换行符,则可以替换

for /f "tokens=*" %%a in ('type "%filename%"') do (
  set quote=!quote!%%a^

)

for /f "tokens=*" %%a in ('type "%filename%"') do (
  set quote=!quote! %%a
)

在一行中获取整个报价。

在任何情况下,您都需要为此延迟扩展!quote!(而不是%quote%)。

于 2012-10-16T21:52:51.330 回答
0

我的回答侧重于计算您提供的路径中的文本文件数量,然后选择一个随机引用编号并输入引用。前面的两个答案都可以用作将引号插入变量的参考(我的代码没有提供):

@Echo off
set path=C:\Users\niv\Documents\test\scripts\quotes
cd /D %path%
setLocal EnableDelayedExpansion
set count=0

for %%a in (*.txt) do (
set /a count=!count!+1
)
echo Total number of quote files: %count%

set /a num=(%count% * %random%) / 32768 + 1
echo Quote #: %num%

type "%path%\quote %num%.txt" 

endlocal
于 2012-10-16T22:17:31.660 回答