【问题标题】:pulling a variable from text file in a sentence从文本文件中提取变量造句
【发布时间】:2023-03-13 11:55:01
【问题描述】:

我目前正在按照句子生成器的方式制作一些东西,它使用包含单词列表的文本文件,例如,名人.txt 有名人列表,这个脚本都将文本文件洗牌到 newcelebrity.txt并从该列表中取出第一个,因此每次都不同,我遇到了一个问题,我希望它是一行,你可以在你输入的句子中调用一个变量,而不是像现在这样分解它,到目前为止,有没有办法让它“这个 $celebrity 真的很棒”,它的工作原理是这样的:https://gyazo.com/9ae8583ed5457709bd1c1dc9cc0cc106 并输出为这个https://gyazo.com/1a5a90f1fbf80faa73d71791a8c1c761,我根本不介意引号,它就是你的方式输入它。 有没有办法让它像我想要的那样工作,或者这是批处理文件的限制?

set /p message=Unity:
set /p input=The variable:
set /p after=Unity:
:gen
setlocal
cd ..
cd rcs
echo doing background work, please wait a few seconds :)
for /f "delims=" %%a in (%input%.txt) do call set "$$%%random%%=%%a"
(for /f "tokens=1,* delims==" %%a in ('set $$') do echo(%%b)>new%input%.txt
endlocal
cls
set "File=C:\Users\%USERNAME%\Desktop\gg\rcs\new%input%.txt"
set /a count=0
echo background work done :)
timeout /t 1 >nul
SETLOCAL enabledelayedexpansion
for /F "tokens=* delims=" %%a in ('Type "%File%"') do (
         Set /a count+=1
         Set "output[!count!]=%%a"     
)

For /L %%i in (1,1,%Count%) Do (
 Call :Action "!output[%%i]!"
 pause
)

Exit
::*******************************************************
:Action
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo %message% %1 %after%
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo if you want to go back and change your inputs type back
echo if you want to continue generating, type gen
echo.
set /p instruction=
goto %instruction%
::*******************************************************

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    要去掉引号,只需使用 %~1 而不是 %1。

    我假设,您想要 输入 类似“this $celeb is great”之类的内容,而不是前三个 set /p 行(因为您的 输出 已经一行)。

    我使用了一些固定变量来保持简短 - 当然,您可以从用户和文本文件中获取它们,就像您已经做过的那样。

    @echo off
    setlocal EnableDelayedExpansion
    set "count=3"
    set "output[3]=John"
    
    set "sentence=this $celeb is great."
    REM above would be your 'set /p' instead
    call :action "!output[%count%]!"
    goto :of
    
    :action
    echo !sentence:$celeb=%~1!
    

    (要明确一点:$celeb 不是一个变量 - 它只是一个字符串,我们稍后会替换它,所以从用户的角度来看,它的行为就像一个变量)

    【讨论】:

    • 嘿,这本身就很好用,但是当我尝试将它集成到我的代码中时遇到了一个问题,我需要在我的洗牌文本文件脚本之后设置“设置输出”,所以它不会每次都给出相同的答案,你在 rem 中指出它将是“上面将是你的 set /p”,第二个问题是我需要说明“$ celeb”或者在未来,一些其他字符串,例如“$country”,以便脚本知道要从哪个文本文件中读取,这是我的结构问题还是有解决方法? pastebin.com/TNxnbXMZ 这是目前所有的代码
    • 在设置“output[3]=%maker1%”之前,我不小心删掉了之前这里的一行代码,说明%maker1%是什么,是文本文件的第一行,但是不能找到该文件,因为紧随其后的脚本会生成一个新的文本文件,该文件用“new{originalname}.txt”打乱,这就是我遇到的障碍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多