Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сложение двух строк в bat - файле

Ответить
Настройки темы
CMD/BAT - [решено] Сложение двух строк в bat - файле

Аватара для sunnykey

Пользователь


Сообщения: 124
Благодарности: 47

Профиль | Отправить PM | Цитировать


Здравствуйте, стоит такая задача: проигрывателю 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
Выделил жирным проблемный участок! В таком виде увеличение строки не происходит, то есть должно быть
Код: Выделить весь код
/add "c:\muzic" /add c:\muzic\cool muzic" /add "c:\muzic\1"
Вместо этого привыводе эхом получается
Код: Выделить весь код
echo param %param%
param "/add"+"c:\muzic"
Как сложить строки, чтобы накапливалось значение?

Отправлено: 07:11, 22-02-2012

 


Moderator


Сообщения: 53175
Благодарности: 15430

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для sunnykey

Пользователь


Сообщения: 124
Благодарности: 47

Профиль | Отправить PM | Цитировать


Три вопроса:
что значит
Код: Выделить весь код
setlocal enableextensions enabledelayedexpansion
и
почему переменная обрамлена восклицательными знаками и где это об этом прочитать можно?

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Последний раз редактировалось sunnykey, 22-02-2012 в 11:41. Причина: Изменил суть вопроса


Отправлено: 11:40, 22-02-2012 | #3



Moderator


Сообщения: 53175
Благодарности: 15430

Профиль | Отправить PM | Цитировать


sunnykey, в командной строке:
Код: Выделить весь код
setlocal /?
Опцию enableextensions указывать было необязательно (по привычке добавляю), она включена по умолчанию. Главное - это enabledelayedexpansion (так называемое "связывание времени выполнения").

Код: Выделить весь код
set /?
Код: Выделить весь код
Связывание времени выполнения для переменных среды окружения полезно при обходе
ограничений раннего связывания, которое происходит при первом чтении текстовой
строки, а не при ее выполнении. Следующий пример демонстрирует возникающую
проблему при использовании раннего связывания переменных:

    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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сложение двух строк в bat - файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход