查找并键入/显示带有批处理文件的随机文本文件



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

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

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

 C:UsersnivDocumentstestscriptsquotes

里面有:

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

我执行了命令:"键入"C:\Usersiv\Documents\test\scripts\quotes\quotes\quote1.txt"当然,这只显示选定的报价1.txt。

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

收到选定的报价后,使用程序执行此命令,该程序使我的计算机可以读取"之后的任何内容。喜欢这个

%speech% "%quotes%"

%speech% 让我的计算机说出引号内的内容。

我希望你能理解我在这里试图完成什么,如果不是问:)

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

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

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

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

行情.txt

quote 1
quote 2
quote 3
quote 4

随机报价.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%

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

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%)。

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

@Echo off
set path=C:UsersnivDocumentstestscriptsquotes
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

最新更新