[CMD] Появление лишнего пробела при работе скрипта

alex_diablo

Постоянный участник
Сообщения
144
Реакции
9
добрый день. есть следующий код (часть скрипта):

что делает: файл file.bat запускается через пробел с параметром. в качестве параметра - номер версии искомого файла (например file.bat 2017.4.2f2)
первый цикл отрабатывается нормально, находится искомый каталог и нужный файл.
далее, в уже найденном каталоге ищутся другие файлы (по соответствующей маске поиска и создаются переменные для них)
проблема в том, что во втором цикле по непонятной мне причине, появляется лишний пробел (на скриншоте видно)
Помогите пожалуйста понять, что я делаю не так?

Bash:
@ECHO OFF
SetLocal EnableExtensions

set "folder=\\fs\Soft\Developers_Tools\Unity"


if "%1" EQU "" goto error
set version=%1
goto search

:search

For /f "delims=" %%a in ('dir /b /s /a-d "%folder%\unitysetup*.exe" ^| find "%version%" ^| find /i /v "UnitySetup-Android" ^| find /i /v "UnitySetup-iOS" ^| find /i /v "UnitySetup-Mac" ^| find /i /v "UnitySetup-Windows" ^| find /i /v "UnityDocumentationSetup" ^| find /i /v "UnitySetup-AppleTV" ^| find /i /v "UnitySetup-Facebook" ^| find /i /v "UnitySetup-Linux" ^| find /i /v "UnitySetup-UWP" ^| find /i /v "UnitySetup-Vuforia" ^| find /i /v "MonoDevelop" ^| find /i /v "UnitySetup-WebGL"') do (
  set fileurl=%%~fa
  set folderurl=%%~dpa
 )
 
 echo %fileurl%
echo %folderurl%

pause
 
For /f "delims=" %%a in ('dir /b /s /a-d "%folderurl%\unity*.exe" ^| find /i "Android-Support"') do set android=%%~fa
For /f "delims=" %%a in ('dir /b /s /a-d "%folderurl%\unity*.exe" ^| find /i "iOS-Support"') do set ios=%%~fa
For /f "delims=" %%a in ('dir /b /s /a-d "%folderurl%\unity*.exe" ^| find /i "Windows-Support"') do set wind=%%~fa

pause
exit /b

un.JPG

проблема в том, что во втором цикле по непонятной мне причине, появляется лишний пробел (на скриншоте видно)

в результате чего искомый файл не находится и путь до него не записывается в переменную, т.е. ошибка - файл не найден.
 
Последнее редактирование модератором:
Попробуйте
CMD/BATCH:
set "folderurl=%%~dpa"

спасибо! так работает!

если можно, подскажите пожалуйста, как правильно сделать проверку на наличие переменной?

Код:
For /f "delims=" %%a in ('dir /b /s /a-d "%folderurl%\unity*.exe" ^| find /i "Android-Support"') do set android=%%~fa
For /f "delims=" %%a in ('dir /b /s /a-d "%folderurl%\unity*.exe" ^| find /i "iOS-Support"') do set ios=%%~fa
For /f "delims=" %%a in ('dir /b /s /a-d "%folderurl%\unity*.exe" ^| find /i "Windows-Support"') do set wind=%%~fa

т.е. к примеру, если файл по маске не найден.

так не работает.

Код:
if exist %android% (echo ^%android%^)
if exist %ios% (echo ^%ios%^)
if exist %wind% (echo ^%wind%^)
if exist %mac% (echo ^%mac%^)
 
Последнее редактирование модератором:
Так как Dragokas Вам ответил, добавлю:
Либо Вы не полный скрипт выложили, либо у Вас нет ":error".
И очень странно, у Вас в скрипте echo off, а в командной строке все равно выводит
 
CMD/BATCH:
if defined android echo "%android%"
и т.п.

Перед тем, как делать присвоение лучше для надёжности эти переменные очистить:
CMD/BATCH:
set "android="
 
Последнее редактирование:
Назад
Сверху Снизу