Этот вопрос является дубликатом , пожалуйста, не отмечайте этот ответ как принятый.
Я разместил его, чтобы показать вам пример использования отложенного расширения и предложить возможные альтернативы.
Кроме того, он показывает другие лучшие практики, которые вы должны использовать, такие как отступы, правильное комментирование и рекомендуемый синтаксис для установки и сравнения переменных и строк.
@Echo Off
Rem Run command: SO_script.bat DEV PRE 5617295
Rem DEV, TEST or PROD
Set "TypeOfTask=%~1"
Rem PRE, INTER or POST
Set "Process=%~2"
Rem Identification number of investigated task
Set "NoOfTask=%~3"
If "%TypeOfTask%"=="DEV" (
Set "source=C:\ISPPT\TASK\%NoOfTask%"
Set "destination=C:\AutomaticTests\DEV\%NoOfTask%"
SetLocal EnableDelayedExpansion
MD "!destination!" 2>Nul
If "%Process%"=="PRE" (
Copy /Y "!source!\fileA.mod" "!destination!">Nul
)
EndLocal
)
Я бы также предложил добавить некую проверку в скрипт, чтобы он получал все необходимые входные параметры в правильном порядке и со значениями, соответствующими допустимым данным.
Если вы используете имена переменных только для целей, показанных в вашем сценарии, вы, конечно, можете вообще не устанавливать ни одну из этих переменных:
@Echo Off
Rem Run command: SO_script.bat DEV PRE 5617295
If "%~1"=="DEV" (
MD "C:\AutomaticTests\DEV\%~1" 2>Nul
If "%~2"=="PRE" (
Copy /Y "C:\ISPPT\TASK\%~1\fileA.mod" "C:\AutomaticTests\DEV\%~1">Nul
)
)
В качестве альтернативы вы можете установить переменные перед блоком в скобках:
@Echo Off
Rem Run command: SO_script.bat DEV PRE 5617295
Rem DEV, TEST or PROD
Set "TypeOfTask=%~1"
Rem PRE, INTER or POST
Set "Process=%~2"
Rem Identification number of investigated task
Set "NoOfTask=%~3"
Rem Setting source and destination variables
Set "source=C:\ISPPT\TASK\%NoOfTask%"
Set "destination=C:\AutomaticTests\%TypeOfTask%\%NoOfTask%"
If "%TypeOfTask%"=="DEV" (
MD "%destination%" 2>Nul
If "%Process%"=="PRE" (
Copy /Y "%source%\fileA.mod" "%destination%">Nul
)
)