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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Переменная в батнике, зависимая от имени файла (http://forum.oszone.net/showthread.php?t=235271)

russur 24-05-2012 08:00 1921498

Переменная в батнике, зависимая от имени файла
 
Доброго дня!

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

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

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

Iska 24-05-2012 08:24 1921504

Получить в переменную окружения «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 1921513

А как получить эту переменную, куда она пропишется?

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

"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 1921574

russur, нет.

Цитата:

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

Какой путь к этой папке?

Цитата:

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

Цитата:

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

Я не могу никак логически связать поиск файла «*.arj» в папке «C:\work» и попытку использования имени найденного файла в папке «D:\bik». Поясните этот вопрос.

russur 24-05-2012 16:01 1921760

Есть папка: 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 1921795

Примерно так:
Код:

@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 1922281

че то не работает :(

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

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

Iska 25-05-2012 11:46 1922293

Цитата:

Цитата russur
В этом батнике прописано: "D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r »

Цитата:

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

Вы продолжаете давать противоречивую информацию.

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

russur 25-05-2012 12:01 1922313

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

Iska 25-05-2012 12:02 1922315

Продолжаем: какую конкретную версию «arj32.exe» Вы используете?

russur 25-05-2012 12:08 1922316

arj32 3.20 Jan 2 2012

russur 25-05-2012 12:43 1922335

если нужно другой, я установлю другой архиватор

russur 25-05-2012 13:27 1922360

В общем вот такой формат заработал, правда если только удалить одно 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 1922535

Цитата:

Цитата russur
правда если только удалить одно ECHO перед разархивацией »

Да, лишнее «echo» перед командой распаковки — это я забыл удалить после отладки. Приношу Вам свои извинения.

russur 25-05-2012 20:45 1922642

Цитата:

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


Время: 04:52.

Время: 04:52.
© OSzone.net 2001-