您好我正在尝试完成一个正在处理的批处理文件。
我有一个动机引用文本文件库,我希望我的批处理文件选择一个随机引用文本文件并在命令窗口中显示它。用我猜的命令类型。
我带引号的文件夹的路径是:
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%让我的电脑在引号内说出什么。
我希望你能理解我在这里想要完成的事情,如果不只是问:)
答案 0 :(得分:2)
我假设每个报价都包含在每个文件的一行中。我建议将所有引号放在名为quotes.txt的单个文件中,每行一个引号。这应该可以更容易地维护报价。然后你需要的是代码,它将计算文件中的行数,然后随机选择1和count之间的一行。
FIND / C命令可以计算文件中的行数。
%RANDOM%
动态变量给出0到32767之间的伪随机数,模数SET / A运算符可用于将值转换为0到count-1之间的数字。
FOR / F命令从文件中读取行,您可以使用SKIP选项跳过随机数行。
<强> quotes.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%
答案 1 :(得分: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
)
将整个报价整理成一行。
在任何情况下,您都需要delayed expansion(!quote!
而不是%quote%
)。
答案 2 :(得分: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