PDA

Показать полную графическую версию : Переменная в батнике, зависимая от имени файла


russur
24-05-2012, 08:00
Доброго дня!

Прошу очень помочь с батником.
Его задача обработать архивный файл. Он его сам распаковывает и раскидывает содержимое по папкам, но дело в том, что перед началом работы батника, в нём нужно прописать название этого архива.
Условие: изначально архивный файл лежит в папке, куда он предварительно скачивается с фтп.
Он единственный архив в той папке, поэтому условие можно как от привязать к самой папке, типа: "взять имея с любого архива arj в той папке"

Вот строка:
"D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r

нужно как то сделать, чтобы 1800 стала переменной, название бралось от самого файла, который лежит по пути C:\work\1800.arj

Iska
24-05-2012, 08:24
Получить в переменную окружения «sArcName» имя первого «*.arj» файла из текущего каталога:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims==" %%i in ('dir /b /a:-d /o:n "*.arj"') do if not defined sArcName set sArcName=%%i
if defined sArcName echo %sArcName%

endlocal
exit /b 0

Получить в переменную окружения «sArcName» путь к первому «*.arj» файлу из указанного каталога:
@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder=E:\Песочница\0144

for /f "delims==" %%i in ('dir /b /a:-d /o:n "%sFolder%\*.arj"') do if not defined sArcName set sArcName=%sFolder%\%%i
if defined sArcName echo %sArcName%

endlocal
exit /b 0

russur
24-05-2012, 08:50
А как получить эту переменную, куда она пропишется?

Мне нужно, чтобы она прописалась в эту строчку ниже

"D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\ -r

то есть батник получиться такой?


@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder=E:\Песочница\0144

for /f "delims==" %%i in ('dir /b /a:-d /o:n "%sFolder%\*.arj"') do if not defined sArcName set sArcName=%sFolder%\%%i
if defined sArcName echo %sArcName%

endlocal
exit /b 0

"D:\bik\arj.exe" x D:\bik\%sArcName%.arj D:\bik\ -r

Iska
24-05-2012, 10:38
russur, нет.

Условие: изначально архивный файл лежит в папке…»
Какой путь к этой папке?

Вот строка:
"D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r »
нужно как то сделать, чтобы 1800 стала переменной, название бралось от самого файла, который лежит по пути C:\work\1800.arj »
Я не могу никак логически связать поиск файла «*.arj» в папке «C:\work» и попытку использования имени найденного файла в папке «D:\bik». Поясните этот вопрос.

russur
24-05-2012, 16:01
Есть папка: D:\bik
В ней находится файл: 1800.arj

Есть батник: test.bat
Задача батника распаковать этот файл.

В этом батнике прописано: "D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r
Эта команда распаковывает файл 1800.arj из папки D:\bik

Вот файл 1800.arj постоянно разный, он может называться и 1801.arj

так вот чтобы в батнике постоянно не менять 1800.arj на 1801.arj например, надо чтобы батника автоматом подставлял туда значение к себе, в зависимости от того, какой файл лежит в папке D:\bik

Iska
24-05-2012, 16:32
Примерно так:
@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder=d:\bik

if exist "%sFolder%\." (
for /f "delims==" %%i in ('dir /b /a:-d /o:n "%sFolder%\*.arj"') do if not defined sArcName set sArcName=%sFolder%\%%i

if defined sArcName (
echo Found archive [!sArcName!]
echo "%sFolder%\arj.exe" x "!sArcName!" "%sFolder%\" -r
) else (
echo Not found any *.arj files in [%sFolder%]
)
) else (
echo Not found folder [%sFolder%]
)

endlocal
exit /b 0

russur
25-05-2012, 11:34
че то не работает :(

Архиватор есть.
Если жестко прописать строчку:
"D:\bik\arj32.exe" x "D:\bik\1800.arj" "d:\bik" -r

при чем убрать слово echo, то распаковка идёт. Видимо че то с переменной не так, а именно с sArcName

Iska
25-05-2012, 11:46
В этом батнике прописано: "D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r »
Если жестко прописать строчку:
"D:\bik\arj32.exe" x "D:\bik\1800.arj" "d:\bik" -r »
Вы продолжаете давать противоречивую информацию.

Так как же всё-таки у Вас зовётся исполняемый файл архиватора, а?

russur
25-05-2012, 12:01
D:\bik\arj32.exe - вот так, прошу прощения
Просто я делаю и на своём компе и на сервере за одно и путаюсь.
Архиватор лежит по пути D:\bik\arj32.exe

Iska
25-05-2012, 12:02
Продолжаем: какую конкретную версию «arj32.exe» Вы используете?

russur
25-05-2012, 12:08
arj32 3.20 Jan 2 2012

russur
25-05-2012, 12:43
если нужно другой, я установлю другой архиватор

russur
25-05-2012, 13:27
В общем вот такой формат заработал, правда если только удалить одно ECHO перед разархивацией

@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder=d:\0

if exist "%sFolder%\." (
for /f "delims==" %%i in ('dir /b /a:-d /o:n "%sFolder%\*.arj"') do if not defined sArcName set sArcName=%sFolder%\%%i

if defined sArcName (
echo Found archive [!sArcName!]
"%sFolder%\arj32.exe" x "!sArcName!" "%sFolder%" -r
) else (
echo Not found any *.arj files in [%sFolder%]
)
) else (
echo Not found folder [%sFolder%]
)

endlocal
exit /b 0



Спасибо тебе ОГРОМНОЕ за помощь!!!! Круто!!!!

Iska
25-05-2012, 17:11
правда если только удалить одно ECHO перед разархивацией »
Да, лишнее «echo» перед командой распаковки — это я забыл удалить после отладки. Приношу Вам свои извинения.

russur
25-05-2012, 20:45
Да, лишнее «echo» перед командой распаковки — это я забыл удалить после отладки. Приношу Вам свои извинения.
да какие извинения, вам спасибо за помощь!!!




© OSzone.net 2001-2012