我有一个.bat文件会询问您的姓名并将其保存在.txt文件中。如果该文件已存在,我希望它说“你的名字是____”
@echo off
if exist BatchfileOutput.txt (
cls
FOR /F %%i IN (BatchfileOutput.txt) DO echo Your name is %%i
) else (
echo What is your name?
set /p %name%= )
echo %name% > BatchfileOutput.txt
pause
它打印ECHO已关闭,可能是由于@echo在顶部关闭。如果我手动将文本添加到文件,它将显示文本。谁能帮助我解决这个问题?
答案 0 :(得分:1)
你需要
=IMPORTXML("https://www.google.com/search?q=23andMe", "//h3/a/@href")
不
set /p name=
将设置名为的变量为NAME的当前内容
答案 1 :(得分:0)
它是set /P name=
但不是set /P %name%=
。
命令echo %name%
也需要移入else
块。为此,必须建立delayed expansion:
@echo off
if exist "BatchfileOutput.txt" (
cls
for /F "usebackq tokens=*" %%i in ("BatchfileOutput.txt") do echo Your name is %%i
) else (
echo What is your name?
set /P name=
setlocal EnableDelayedExpansion
> "BatchfileOutput.txt" echo !name!
endlocal
)
pause
我将redirection部分移到了前面,以避免输出尾随的 SPACE 。
为了避免延迟扩展,您可以使用else
作为goto :Label
块的最后一个命令,然后省略if
和括号,来避免括号else
阻止,然后在:Label
之前放置pause
:
@echo off
if exist "BatchfileOutput.txt" (
cls
for /F "usebackq tokens=*" %%i in ("BatchfileOutput.txt") do echo Your name is %%i
goto :Label
)
echo What is your name?
set /P name=
> "BatchfileOutput.txt" echo %name%
:Label
pause
我引用了所有文件路径,因此使用for /F
的usebackq
选项,以避免此类包含空格的字符串出现问题。此外,我说tokens=*
循环的for /F
选项可以读取整行,即使名称由多个单词组成。