Как исправить команду Echo, вложенную в оператор if - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь создать скрипт, который создаст другой пакетный скрипт.Однако этот код не будет работать должным образом, немедленно выйдя из него, как только будет выполнен оператор if.

set yes=yes
pause


IF /I %yes% == yes (
    ECHO REM Music>>mf.bat
    ECHO FOR /f %%i in (C:\CopyToRoot\MusicFileAndLocation.txt) do set MusicFile=%%i>>mf.bat    
)`

Однако, если вторая строка в операторе if удалена, код выполняется без проблем.

Что я делаю неправильно?что-то мне не хватает в выражении echo?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Возможно:

@Echo Off
Set "yes=yes"
Pause

If /I "%yes%"=="yes" (
    >"mf.bat" (
        Echo @Echo Off
        Echo Rem Music
        Echo For /F "UseBackQ Delims=" %%%%A In ("C:\CopyToRoot\MusicFileAndLocation.txt"^) Do Set "MusicFile=%%%%A"
    )
)

Удвойте проценты и избегайте любых внутренних закрывающих скобок.

0 голосов
/ 31 января 2019

Вам необходимо отформатировать блок кода с небольшим усилием, однако, намного проще избавиться от блока и просто вызвать метку.Кроме того, пакетный файл будет использовать %, поэтому вам необходимо удвоить их, чтобы правильно перенаправить строку в файл.

@echo off
set yes=yes
pause

IF /I "%yes%"=="yes" call :final
goto :eof
:final
echo REM Music>mf.bat
echo FOR /f %%%%i in (C:\CopyToRoot\MusicFileAndLocation.txt) do set MusicFile=%%%%i>>mf.bat

Примечание. Я использую однократное перенаправление в первой строке rem для перезаписифайл, иначе он будет добавляться каждый раз, когда вы запускаете код, если это было сделано, просто выполните двойное перенаправление >>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...