在.bat文件中写入文件时出错

时间:2017-07-11 22:11:14

标签: batch-file cmd

我有一个.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在顶部关闭。如果我手动将文本添加到文件,它将显示文本。谁能帮助我解决这个问题?

2 个答案:

答案 0 :(得分:1)

你需要

=IMPORTXML("https://www.google.com/search?q=23andMe", "//h3/a/@href")

set /p name= 

将设置名为的变量为NAME的当前内容

答案 1 :(得分:0)

  1. 它是set /P name=但不是set /P %name%=

  2. 命令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
    
  3. 我引用了所有文件路径,因此使用for /Fusebackq选项,以避免此类包含空格的字符串出现问题。此外,我说tokens=*循环的for /F选项可以读取整行,即使名称由多个单词组成。