Требуется небольшая помощь с bat-файлом

J
На сайте с 12.02.2012
Offline
2
3317

Здравствуйте.

Требуется помощь в написании bat-файл.

Задача: из заданного в командной строке каталога распаковать все файлы с расширением 7z в каталог, содержащий текущую дату. Используя цикл FOR, ввести проверку ошибок: в каталоге нет ни одного файла с расширением 7z.

Своими силами написал следующий код код:

cls

set exist=1
for %%f in ("%USERPROFILE%"\"Рабочий стол"\bat\batnik.7z) do "C:\Program Files\7-Zip\7z.exe" x %1 -oc:\mybatcatalog\"%date%"
set exist=0
if %exist%==0 echo Нет ни одного файла с расширением 7z

По какой-то причине, в написанном не происходит проверка по условию (наличие архива в каталоге).

Заранее благодарен.

Rimlyanin
На сайте с 22.02.2006
Offline
200
#1
JBMax:
Здравствуйте.

Требуется помощь в написании bat-файл.

Задача: из заданного в командной строке каталога распаковать все файлы с расширением 7z в каталог, содержащий текущую дату. Используя цикл FOR, ввести проверку ошибок: в каталоге нет ни одного файла с расширением 7z.

Своими силами написал следующий код код:
cls

set exist=1
for %%f in ("%USERPROFILE%"\"Рабочий стол"\bat\batnik.7z) do "C:\Program Files\7-Zip\7z.exe" x %1 -oc:\mybatcatalog\"%date%"
set exist=0
if %exist%==0 echo Нет ни одного файла с расширением 7z


По какой-то причине, в написанном не происходит проверка по условию (наличие архива в каталоге).


Заранее благодарен.

А зачем цикл?

Разве нельзя скормить просто все *.7z скрипту?

да и парсить можно вывод команды DIR через FIND

P.S. я бы попробовал, да только 7z ставить не охота....

J
На сайте с 12.02.2012
Offline
2
#2
А зачем цикл?
Разве нельзя скормить просто все *.7z скрипту?
да и парсить можно вывод команды DIR через FIND

P.S. я бы попробовал, да только 7z ставить не охота....

В это вся и суть, требуется реализация именно через for.

Rimlyanin
На сайте с 22.02.2006
Offline
200
#3
JBMax:
В это вся и суть, требуется реализация именно через for.

а если так :

 for /f "usebackq delims=" %%d in (`"dir *.7z /b/s | sort /R"`) do  "C:\Program Files\7-Zip\7z.exe" x %1 -oc:\mybatcatalog\"%date%"  
J
На сайте с 12.02.2012
Offline
2
#4
а если так :

Проходит все, кроме условия, как и ранее.

В конце выписывает "Нет ни одного файла с расширением 7z", хотя он есть и файлы разархивировались.

Rimlyanin
На сайте с 22.02.2006
Offline
200
#5
JBMax:
Проходит все, кроме условия, как и ранее.

В конце выписывает "Нет ни одного файла с расширением 7z", хотя он есть и файлы разархивировались.

Эх, молодежь... ни про перенаправление вывода ни в курсе, ни про конвейер команд...

Заставил ты меня вспомнить и я его таки отладил даже :

@echo off 


SET zipfolder=Q:\forum\7z\
SET unzipfolder=Q:\forum\U7z\

SET count=0
SET unarcfolder=%unzipfolder%%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%

setlocal enabledelayedexpansion

if not exist %zipfolder%\nul cls
if not exist %zipfolder%\nul echo а где же папка
if not exist %zipfolder%\nul echo %zipfolder%
if not exist %zipfolder%\nul echo с архивами?
if not exist %zipfolder%\nul echo.
if not exist %zipfolder%\nul echo А ведь она должна быть. :( && exit

MD %unarcfolder%

if not exist %unarcfolder%\nul cls
if not exist %unarcfolder%\nul echo Папка
if not exist %unarcfolder%\nul echo %unarcfolder%
if not exist %unarcfolder%\nul echo по как йто причине не создалась.
if not exist %unarcfolder%\nul echo Куда же мне распаковывать?
if not exist %unarcfolder%\nul echo.
if not exist %unarcfolder%\nul echo Увы. :( && exit

CD %zipfolder%

for /f "usebackq delims=" %%d in (`"dir *.7z /b/s | sort /R"`) do "C:\Program Files\7-Zip\7z.exe" x "%%d" -y -o"%unarcfolder%" & SET /a count=!count!+1

cls

if %count%==0 echo В заданной папке
if %count%==0 echo %zipfolder%
if %count%==0 echo нет ни одного файла с расширением 7z && exit
if %count%==0 echo.
if %count%==0 echo Увы. :( && exit


echo Файлы с расширением 7z,
echo в количестве %count% штук,
echo находящиеся в папке
echo %zipfolder%
echo распакованы в папку
echo %unarcfolder%
echo.
echo Скрипт сделал свое дело, скрипт может уходить (ну почти классика)
exit

Тока это, будешь сдавать лабу (или что там у тебя) я тебе лицензию на правку кода не давал... :)

J
На сайте с 12.02.2012
Offline
2
#6

Спасибо за помощь :)

P.S. Если интересно, нашел вариант более компактной реализации.

cls
set dir="C:\bat\"
@set dt= %date%
set out_dir=C:\bat\out\
mkdir "%out_dir%%dt%\"
set /a file_count=0
cd %dir%
for %%a in ("%dir%\*.7z") do (
echo %%a
"C:\Program Files\7-Zip\7z.exe" x %%a -o"%out_dir%%dt%\"
set /a file_count=%file_count%+1
)
if %file_count%==0 echo В каталоге нет ни одного файла с расширением 7z
Rimlyanin
На сайте с 22.02.2006
Offline
200
#7
JBMax:
Спасибо за помощь :)

P.S. Если интересно, нашел вариант более компактной реализации.

ну компактнее... есть убрать у меня проверку на наличие папок,кучу echo и прочее....

ДА и подпапки у тебя не проверяет :)

А прикрутить счетчик файлов к своему варианту ты не сможешь,

потому что не знаешь, для чего setlocal enabledelayedexpansion и почему у меня коунт не в %% а в !!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий