2013-12-10 5 views
3

EDIT: Я решил свою проблему на основе предложений от npocmaka и magoo. Теперь, когда я понимаю, что это отступы, вызвавшие это, можете ли вы, ребята, предложить мне, как я буду очищать свой код в будущем?Использование, если условие в CMD

Вот моя летучая мышь файл:

@echo off 
    setlocal enabledelayedexpansion 

    rem set lang pre-requisites 
    rem Purpose can be 'test' or 'deploy' 
    SET purpose="test" 
    SET lang="English-India" 
    SET lang_code="EnIn" 

    rem if purpose is test then the folder will be EnInP101M2Tsub, if purpose is deploy then EnInP101M2DFull 
    if "%purpose%"=="test"(SET folder=="%lang_code%P101M2Tsub") 
    else if "%purpose%"=="deploy"(SET folder=="%lang_code%P101M2DFull") 

    rem set required paths here 
    SET audio="C:\Users\Administrator\..path..\%lang%\%purpose%\BGM\M2\%folder%\*.wav" 
    SET source="C:\Users\Administrator\Downloads\Matt_Trial\..path..\%lang%\%purpose%\BGM\M2" 
    SET target="C:\Users\Administrator\Downloads\Matt_Trial\..path..\%lang%\%purpose%\BGM\M3\*" 

    rem copying the data 
    xcopy %source% %target% /e /i /h 
    rem copying audio files into the other folders 
    for /d %%a in (%target%) do copy %audio% "%%a" 

    rem renaming M3 folders 
    cd %target% 
    for /d %%a in (*) do (
     set "p=%%a" 
     set "fp=!p:~0,8!" & set "tp=!p:~10!" 
     ren %%a !fp!M3!tp! 
    ) 

** Для вашего понимания ** У меня есть 2 папки в моей родительской папке (M1, M2, M3). Шаг 1: Я копирую содержимое в M2 в новую папку M3. Шаг 2: Мне нужно скопировать содержимое папки под M2, которая имеет мой звук во все папки в M3. Шаг 3: Я переименовываю папки под M3.

Надеюсь, я ясно дал понять. Мне нужно выяснить путь аудио на основе заданных переменных. Мне нужна помощь с частью условия if. На данный момент я продолжаю получать. Система не может найти указанный файл. Пожалуйста помоги!!

ответ

3

Несколько ошибок.

SET будет включать в себя " после = КРОМЕ если вы используете` SET „вар = данные“, который используется для того, чтобы конечные пробелы на линии не включены в данные присвоенных.

Любой символ после = будет включен (некоторые должны быть «экранированы», если у них есть специальное значение для партии, поэтому set var==data будет включать в себя второй = в назначенных данных.

Вы не попали в ловушку «пробелы в переменных» - синтаксис set var =data установит переменную с именем var пространство не var.

Там должно быть пространство (строго сепаратором, я считаю) между вторым операнды IF заявления и ( (если используется)

Аналогично, предложение ELSE должен быть )Space еще Space( -.. все на одной и той же линии Эта последовательность символов не может быть нарушена

В вашем IF, вы нас ing "%purpose%" С purpose нас установили в "test", тогда это будет оцениваться как ""test"", что, вероятно, будет путать, поэтому не следует включать « в ваших данных, если у вас нет по-настоящему веской причины.

+0

Спасибо за предложения. Очки отмечены :) – Matt

+0

Спасибо, что помогли мне еще раз. Я был бы очень признателен за дальнейшие предложения по очистке кода в будущем. Это было бы очень полезно для меня. – Matt

1

Это:

@echo off 
    setlocal enabledelayedexpansion 

    rem set lang pre-requisites 
    rem Purpose can be 'test' or 'deploy' 
    SET purpose="test" 
    SET lang="English-India" 
    SET lang_code="EnIn" 

    rem if purpose is test then the folder will be EnInP101M2Tsub, if purpose is deploy then EnInP101M2DFull 
    if "%purpose%"=="test"(SET folder=="%lang_code%P101M2Tsub") 
    else if "%purpose%"=="deploy"(SET folder=="%lang_code%P101M2DFull") 

Скорее должен выглядеть (как у вас есть только два варианта ..)

@echo off 
    setlocal enabledelayedexpansion 

    rem set lang pre-requisites 
    rem Purpose can be 'test' or 'deploy' 
    SET "purpose=test" 
    SET "lang=English-India" 
    SET "lang_code=EnIn" 

     rem if purpose is test then the folder will be EnInP101M2Tsub, if purpose is deploy then EnInP101M2DFull 
     if "%purpose%"=="test" ( 
     SET "folder=%lang_code%P101M2Tsub" 
     ) 

     if "%purpose%"=="deploy" ( 
     SET "folder=%lang_code%P101M2DFull" 
     ) 

     echo %folder% 
     endlocal 

Вы не можете создать линию с else и набор не работает должным образом с двойной = , И ваши сравнения неверны, поскольку у вас есть кавычки в переменных значениях.

+0

Спасибо за немедленный ответ. Я на самом деле пробовал это. Но когда я запускаю свой файл bat, возникает ошибка, так как синтаксис команды неверен. – Matt

+0

Это из-за цитат ... Проверьте мое редактирование – npocmaka

+0

Спасибо, Оказывается, проблема действительно в отпечатке! – Matt

0

У меня пока нет 50 репутов, поэтому мне нужно прокомментировать ответ.

Когда я сталкиваюсь с проблемами с моими пакетными файлами, я считаю полезным REM@ECHO OFF.

Затем создайте короткое сокращение для командного файла и измените поле «Цель», чтобы передать вывод в текстовый файл.

Так что, если ваша партия находится в C: \ Test \ mybatch.bat затем создать ярлык для партии в C: \ Test \

Следующая правой кнопкой мыши на ярлыке и выберите «Свойства». На вкладке «ярлык», добавьте следующие строки в конец текста в целевом поле .. >>output.txt

Запустите ярлык, который сохранит все команды и ошибки в файл output.txt, где вы можете увидеть, что вызвав проблему, например переменную, которая не задана.

+0

«У меня еще нет репутации 50, поэтому я должен прокомментировать ответ». У вас лучше репутация, чем я :) – Matt

+0

Эй! Это похоже на интересный способ устранения неполадок. Будет реализовывать это, когда я столкнулся с трудностями. Еще раз спасибо. Помощь очень ценится. – Matt

Смежные вопросы