2017-07-11 29 views
1

名前を尋ねて.txtファイルに保存する.batファイルがあります。ファイルがすでに存在する場合、私はそれが言いたい「あなたの名前がある____」エラー.batファイルのファイルに書き込む

@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によるオフで出力します。手動でテキストをファイルに追加すると、テキストが表示されます。誰も私がこれを回避するのを助けることができますか?

+1

[Windowsバッチ変数は設定されません]の複製が可能です(https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) – SomethingDark

答えて

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 
    

    私はまた、出力する末尾SPACEを避けるために、フロントにredirection一部を移動しました。

    が遅れ拡大を避けるために、あなたはその後、ifブロックの最後のコマンドとしてgoto :Labelを使用してelseを省略し、括弧、そして配置することにより、括弧に入れelseブロックを避けることができ:Labelpause前:

    @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 
    

空白文字を含む文字列の問題を避けるため、すべてのファイルパスを引用したので、usebackqオプションをfor /Fとしました。さらに、私は、ループの名前が複数の単語で構成されている場合でも、完全な行を読み取るために、tokens=*オプションを指定しました。

1

あなたはそれがset /P name=なくあるNAMEの現在の内容

関連する問題