|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сложение двух строк в bat - файле |
|
CMD/BAT - [решено] Сложение двух строк в bat - файле
|
Пользователь Сообщения: 124 |
Здравствуйте, стоит такая задача: проигрывателю mpc-hc нужно передать через параметр папки для создания списка воспроизведения. Для этого использую скрипт, но проигрыватель не умеет воспроизводить то, что лежит в подпапке, поэтому использую цикл для перебора всех папок внутри указанной.
@echo off title Test Media Player Classic if "%~1"=="" ( echo No settings are acctepded goto :end) if "%~x1"=="" ( echo Parameter is not a directory! goto :end) set muz=%1 echo muz=%muz% set param="/add "+%muz% echo Checking subdirectory... for /r %muz% /d %%f in (*) do ( echo %%f founded! %param%=%param%+"/add "+%%f+" ") cd "C:\Program Files\K-Lite Codec Pack\Media Player Classic" echo Starting player mpc-hc.exe %param% /play /fullscreen :end set muz= set param= pause Вместо этого привыводе эхом получается Как сложить строки, чтобы накапливалось значение? |
|
Отправлено: 07:11, 22-02-2012 |
Сообщения: 53486
|
Профиль | Отправить PM | Цитировать sunnykey, примерно так:
@echo off setlocal enableextensions enabledelayedexpansion if "%~1"=="" ( echo Не задана папка для добавления в список воспроизведения. goto :eof ) set param=/add "%~1" for /r "%~1" /d %%f in (*) do set param=!param! /add "%%f" start /d"%ProgramFiles%\K-Lite Codec Pack\Media Player Classic" mpc-hc.exe !param! /play /fullscreen |
Отправлено: 07:37, 22-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать |
------- Последний раз редактировалось sunnykey, 22-02-2012 в 11:41. Причина: Изменил суть вопроса Отправлено: 11:40, 22-02-2012 | #3 |
Сообщения: 53486
|
Профиль | Отправить PM | Цитировать sunnykey, в командной строке:
Опцию enableextensions указывать было необязательно (по привычке добавляю), она включена по умолчанию. Главное - это enabledelayedexpansion (так называемое "связывание времени выполнения"). Связывание времени выполнения для переменных среды окружения полезно при обходе ограничений раннего связывания, которое происходит при первом чтении текстовой строки, а не при ее выполнении. Следующий пример демонстрирует возникающую проблему при использовании раннего связывания переменных: set VAR=before if "%VAR%" == "before" ( set VAR=after if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения ) Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF подставляется в момент первого использования в первом IF, в том числе и в тело первого ветвления IF, которое является составным выражением. В IF внутри составного выражения в действительности сравниваются значения "before" и "after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку: set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST% в данном случае список файлов текущей папки никогда не будет построен. Вместо этого, значением переменной LIST будет имя последнего найденного файла. И вновь, это случилось потому, что %LIST% подставляется всего один раз - в момент обработки выражения FOR, когда список еще пуст. Фактически, приведенный фрагмент эквивалентен следующему примеру: for %i in (*) do set LIST= %i в котором имя последнего найденного файла сохраняется в переменной LIST. Связывание времени выполнения для переменных среды окружения происходит при использовании специального символа (восклицательного знака), обозначающего проведение сопоставления во время выполнения. Если включена поддержка связывания времени выполнения, то для достижения ожидаемых результатов приведенные выше фрагменты должны быть изменены следующим образом: set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo Тело внутреннего оператора сравнения ) set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST% |
Отправлено: 17:25, 22-02-2012 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] CMD/BAT - С помощью bat-ника найти и удалить текст в файле | InVariable | Скриптовые языки администрирования Windows | 4 | 22-05-2015 20:06 | |
Assm - Сложение двух чисел | Rebel666 | Программирование и базы данных | 8 | 22-04-2012 17:30 | |
VBS/WSH/JS - Удаление строк в REG файле | gen0m.rsw | Скриптовые языки администрирования Windows | 9 | 28-09-2011 18:03 | |
[решено] Количество строк в файле | 0xDEADBEEF | AutoIt | 3 | 25-01-2010 21:47 | |
Сложение строк на PHP | Vlad Drakula | Вебмастеру | 1 | 08-06-2003 21:30 |
|