Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Использование exe-файла, описанного полным путём, в For (http://forum.oszone.net/showthread.php?t=297640)

megaloman 29-03-2015 22:06 2489357

Использование exe-файла, описанного полным путём, в For
 
Код:

@Echo Off
cls

Set "Arc=%ProgramFiles%\WinRar\rar.exe"

FOR /F "usebackq delims=" %%i IN (`"%Arc%" /?`) DO Echo %%i
pause

Работает успешно. При замене For
Код:

FOR /F "usebackq delims=" %%i IN (`rar.exe a "1 2 3.rar"`) DO Echo %%i
тоже батник отрабатывает успешно (при условии, что rar.exe система находит).
Код:

FOR /F "usebackq delims=" %%i IN (`"%Arc%" a "1 2 3.rar"`) DO Echo %%i
Вот этот вариант работать не хочет - сообщение "C:\Program" не является .....
Как надо сделать? Мне нежелательно чтобы exe-файл указывался не по полному пути.

Foreigner 30-03-2015 00:43 2489385

megaloman
Код:

@echo off
setlocal

set "path=%path%;%ProgramFiles%\WinRar"

for /f "tokens=*" %%i in (' rar a "1 2 3.rar" ') do echo %%i

ЗЫ. А что добавляется в "1 2 3.rar" и, зачем запихивать в for?

Iska 30-03-2015 01:54 2489398

Цитата:

Цитата Foreigner
и, зачем запихивать в for? »

Присоединюсь к вопросу.

Georgio 30-03-2015 03:01 2489410

megaloman, Foreigner, Iska, тут проблема теоретическая. Поскольку команда, результат выполнения которой разбирается с помощью "for" (в данном случае этой командой является
Код:

"%Arc%" a "1 2 3.rar"
),
выполняется в новой копии интерпретатора командной строки, запущенной с ключом "/C" (то есть командная строка запуска данного процесса выглядит так:
Код:

"C:\Windows\System32\cmd.exe" /c "C:\Program Files\WinRar\rar.exe" a "1 2 3.zip"
),
то и обработка символов кавычек ведётся командой "CMD" и подчиняется правилам из справки по команде "CMD", что и приводит к ошибке.



Выход из этой ситуации такой:
Код:

for /f "usebackq delims=" %%i in (`""%Arc%" a "1 2 3.zip""`) do echo %%i
,
где "подразборная" команда будет запускаться командной строкой
Код:

"C:\Windows\System32\cmd.exe" /c ""C:\Program Files\WinRar\rar.exe" a "1 2 3.zip""
.

megaloman 30-03-2015 09:05 2489470

Iska, тут проблема теоретическая. На самом деле в rar мне нужна команда LB - то есть, мне нужно получить список файлов в архиве. А еще точнее, надо определить - файл архив или нет, так как приходят файлы не со стандартным расширением архива. Спасибо Georgio и всем кто принял участие.

Iska 30-03-2015 14:11 2489605

Цитата:

Цитата megaloman
А еще точнее, надо определить - файл архив или нет »

Слишком сложный путь выбран. Если Вам на самом деле не нужно содержимое архива, то:
Код:

"C:\Program Files\WinRAR\RAR.exe" t "Путь\Архив или ЯкобыАрхив.xxx" && echo Это архив || echo Это не архив, либо битый архив


Время: 07:54.

Время: 07:54.
© OSzone.net 2001-