1

Тема: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Имеется батник:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set FILE=
for %%a in (*.mts) do set FILE=!FILE!+%%a

@echo on
"C:\Program Files (x86)\eac3to\eac3to.exe" %FILE:~1% 1:merged.h264 2:merged.ac3 -log=nul
"C:\Program Files\MP4BOX\mp4box.exe" -add merged.h264 -add merged.ac3 merged.mp4

Как сделать, так чтобы он обрабатывал не все файлы в директории, а только перенесенные на него мышью?
И что дописать, чтобы вместо merged.mp4 была переменная с перенесенными в него файлами формата "название 1-го файла-название последнего файла_merged.mp4 ?
Спасибо!

2

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Непонятно, что и куда Вы хотите приспособить. Впрочем, вот Вам два варианта:

@echo off
setlocal enableextensions enabledelayedexpansion

echo [%*]
echo.

:Repeat
set sArg=%~1
if defined sArg echo [%sArg%]& shift & goto :Repeat

endlocal
exit /b 0

приспосабливайте.

3 (изменено: Malcev, 2013-10-08 18:31:04)

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Ничего к сожалению не понял.
Мне надо чтобы в переменную FILE записывались названия файлов, которые я обведу мышкой и перенесу в этот батник.
Я написал на автохотки, то что мне нужно.
Как такое повторить в батнике?

n = 0
Loop %0%  ; For each parameter (or file dropped onto a script)
{
   GivenPath := %A_Index%
   Loop %GivenPath%, 1
      FileName%n% = %A_LoopFileName%
   SplitPath, FileName%n%,,,,FileNameNoExt%n%
   n++
}
k := n
n = 0
loop %k%
{
   Names := Names "+" FileName%n%
   n++
}
StringTrimLeft, Names, Names, 1
n := n - 1
RealNames = % FileNameNoExt0 "-" FileNameNoExt%n% "_merged.mp4"
msgbox, % Names
msgbox, % RealNames

4

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Мне надо чтобы в переменную FILE записывались названия файлов, которые я обведу мышкой и перенесу в этот батник.

@echo off
setlocal enableextensions enabledelayedexpansion

set FILE=%*
…

5 (изменено: Malcev, 2013-10-08 21:10:22)

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

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

6

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

через плюсы

@echo off
setlocal enableextensions enabledelayedexpansion

set sAllArgsWithPlus=

:Repeat
set sArg=%~1
if defined sArg set sAllArgsWithPlus=%sAllArgsWithPlus%+%sArg%& shift & goto :Repeat

set sAllArgsWithPlus=%sAllArgsWithPlus:~1%

echo [%sAllArgsWithPlus%]

endlocal
exit /b 0

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

@echo off
setlocal enableextensions enabledelayedexpansion

set sArgFirst=%~n1

:Repeat
set sArgLast=%~n1
set sArgNext=%~n2
if defined sArgNext shift & goto :Repeat

set sArgNamesFirstAndLast=%sArgFirst%-%sArgLast%

echo [%sArgNamesFirstAndLast%]

endlocal
exit /b 0

7

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Спасибо!
А как их объединить?
И что вы посоветуете почитать, чтоб я хоть что-то понял из вашего кода?

8

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Malcev пишет:

И что вы посоветуете почитать, чтоб я хоть что-то понял из вашего кода?


call /?
shift /?


Malcev пишет:

А как их объединить?

В переменной?

set /? пишет:

Вывод, задание и удаление переменных среды cmd.exe.

SET [переменная=[строка]]

  переменная  Имя переменной среды.
  строка      Строка символов, присваиваемая указанной переменной.

. . .

9

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

А как их объединить?

Например, так:

@echo off
setlocal enableextensions enabledelayedexpansion

set sArg1=%~1

if not defined sArg1 (
    echo Usage: %~nx0 ^<file1^> [^<file2^> [... ^<fileN^>]]
    endlocal
    exit /b 1
)
    
call :GetAllArgsWithPlus %*
call :GetArgNamesFirstAndLast %*

echo [%AllArgsWithPlus%]
echo [%ArgNamesFirstAndLast%]

endlocal
exit /b 0

:GetAllArgsWithPlus
    setlocal enableextensions enabledelayedexpansion
    
    set sOut=%~0
    
:Repeat1
    set sArg=%~1
    if defined sArg set sResult=%sResult%+%sArg%& shift & goto :Repeat1
    
    rem set sResult=%sResult:~1%
    endlocal & set %sOut:~4%=%sResult:~1%
    exit /b

:GetArgNamesFirstAndLast
    setlocal enableextensions enabledelayedexpansion
    
    set sOut=%~0
    set sArgFirst=%~n1
    
:Repeat2
    set sArgLast=%~n1
    set sArgNext=%~n2
    if defined sArgNext shift & goto :Repeat2
    
    endlocal & set %sOut:~4%=%sArgFirst%-%sArgLast%
    exit /b

И что вы посоветуете почитать,

Например, это: CMD/BAT: Коллекция ссылок.

10

Re: CMD/BAT: Обрабатывать только перетащенные на батник файлы

Спасибо большое, попытаюсь разобраться.