Показать полную графическую версию : Переменная в батнике, зависимая от имени файла
Доброго дня!
Прошу очень помочь с батником.
Его задача обработать архивный файл. Он его сам распаковывает и раскидывает содержимое по папкам, но дело в том, что перед началом работы батника, в нём нужно прописать название этого архива.
Условие: изначально архивный файл лежит в папке, куда он предварительно скачивается с фтп.
Он единственный архив в той папке, поэтому условие можно как от привязать к самой папке, типа: "взять имея с любого архива arj в той папке"
Вот строка:
"D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r
нужно как то сделать, чтобы 1800 стала переменной, название бралось от самого файла, который лежит по пути C:\work\1800.arj
Получить в переменную окружения «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
А как получить эту переменную, куда она пропишется?
Мне нужно, чтобы она прописалась в эту строчку ниже
"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
russur, нет.
Условие: изначально архивный файл лежит в папке…»
Какой путь к этой папке?
Вот строка:
"D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r »
нужно как то сделать, чтобы 1800 стала переменной, название бралось от самого файла, который лежит по пути C:\work\1800.arj »
Я не могу никак логически связать поиск файла «*.arj» в папке «C:\work» и попытку использования имени найденного файла в папке «D:\bik». Поясните этот вопрос.
Есть папка: 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
Примерно так:
@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
че то не работает :(
Архиватор есть.
Если жестко прописать строчку:
"D:\bik\arj32.exe" x "D:\bik\1800.arj" "d:\bik" -r
при чем убрать слово echo, то распаковка идёт. Видимо че то с переменной не так, а именно с sArcName
В этом батнике прописано: "D:\bik\arj.exe" x D:\bik\1800.arj D:\bik\-r »
Если жестко прописать строчку:
"D:\bik\arj32.exe" x "D:\bik\1800.arj" "d:\bik" -r »
Вы продолжаете давать противоречивую информацию.
Так как же всё-таки у Вас зовётся исполняемый файл архиватора, а?
D:\bik\arj32.exe - вот так, прошу прощения
Просто я делаю и на своём компе и на сервере за одно и путаюсь.
Архиватор лежит по пути D:\bik\arj32.exe
Продолжаем: какую конкретную версию «arj32.exe» Вы используете?
если нужно другой, я установлю другой архиватор
В общем вот такой формат заработал, правда если только удалить одно 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
Спасибо тебе ОГРОМНОЕ за помощь!!!! Круто!!!!
правда если только удалить одно ECHO перед разархивацией »
Да, лишнее «echo» перед командой распаковки — это я забыл удалить после отладки. Приношу Вам свои извинения.
Да, лишнее «echo» перед командой распаковки — это я забыл удалить после отладки. Приношу Вам свои извинения.
да какие извинения, вам спасибо за помощь!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.