Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Упрощенная проверка файлов

Ответить
Настройки темы
CMD/BAT - [решено] Упрощенная проверка файлов

Аватара для root221

Старожил


Сообщения: 177
Благодарности: 13

Профиль | Отправить PM | Цитировать


Изменения
Автор: root221
Дата: 01-03-2012
Подскажите пожалуйста как можно упростить и сделать это всё через for

Код: Выделить весь код
If Not Exist file2.exe (
echo:Нету файла file1.exe&echo:Продолжение не возможно.&pause >nul&Exit 1
)
If Not Exist cmd.log (
:: Создаём файл и продолжаем.
echo:> cmd.log
)
If Not Exist file3.exe (
echo:Нету файла file2.exe&echo:Продолжение не возможно.&pause >nul&Exit 1
)
например что в батнике выглядело так...

Код: Выделить весь код
for (-) in (file.exe,cmd.log,file3.exe) do ???
Только cmd.log Если его нету тогда создаём и продолжаем дальше выполнять скрипт....

если файлов нету, тогда выводить ошибку, что какова то из файлов не хватает, если файлы все присутствуют тогда продолжаем дальше.

Если возможно как нибуть можно сделать, что бы показывало каких именно не хватает для продолжения то выводить их имя в консоль...

в консоле вид типа....

Код: Выделить весь код
echo:Файлы без которых скрипт не может запуститься %file%

Отправлено: 08:15, 28-02-2012

 

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
Set RequiredFiles="file.exe" "cmd.log" "file3.exe"
Call :CheckRequiredFiles %RequiredFiles%
:CheckRequiredFiles
If Not Exist "%~1" (
Echo Missing required file: %~1
Pause&Exit 1
) 
Shift
If Not "%~1"=="" GoTo :CheckRequiredFiles

:: =============
:: Здесь основной код скрипта 
:: =============
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:31, 28-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для root221

Старожил


Сообщения: 177
Благодарности: 13

Профиль | Отправить PM | Цитировать


Anonymоus,

Подскажите пожалуйста как можно упростить и сделать это всё через for »

cmd.log если его нету тогда создаём и продолжаем дальше выполнять скрипт....

-------

Сейчас лог файла если нету, то скрипт выдаёт ошибку и пишет что файл cmd.log не наиден, я писал выше его нужно создать если он остсутствует и продолжать дальше выполнять основной код скрипта.

И просил сделать всё через фор.


Если возможно как нибуть можно сделать, что бы показывало каких именно не хватает для продолжения то выводить их имя в консоль...

Исправляю *Надо что бы скрипт полностью проверил все файлы и показал каких имеено не хватает, если все файлы на месте тогда ничего не показывать и продолжать выполнять основной код скрипта..

Обьясняю в дву словах

Нужно чтобы скрипт проверил файлы в дериктории %SystemRoot%\System32, если тут каких то файлов не хватает, кроме cmd.log, тогда показывать каких именно и выводить имена всех файлов, которых не хватает, в консоль.

cmd.log - Этот файл у меня находится и будет находиться в папке с пакетным файлом, поэтому ему путь не нужен, он должен проверяться в деректории из которой запускается батник и в случае если его рядом не оказалось, тогда создать его и ошибок никаких не выводить (Тоесть продолжать выполнять основной код скрипта.)

Последний раз редактировалось root221, 29-02-2012 в 00:16.


Отправлено: 00:04, 29-02-2012 | #3


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


root221, если вам важно, чтобы проверка именно через for была - вот второй вариант. Хотя не пойму, чем первый не устроил, который с shift.

Если не находит один или несколько файлов - пишет, какие файлы не были найдены, потом пауза для прочтения и выход с кодом ошибки 1. Если всё в порядке, то выполняет нужные вам команды, которые идут снизу этого кода.
Код: Выделить весь код
@Echo Off
:: Полные или относительные пути к файлам для проверки, разделённые символом ;
Set RequiredFiles=file1.exe;C:\file2.exe;%WinDir%\file3.exe
Set MissingFiles=false
:Check
For /F "tokens=1,* delims=;" %%A In ("%RequiredFiles%") Do (
If Not "%%A"=="" (
If Not Exist "%%A" (Set MissingFiles=true & Echo Не найден файл "%%A")
Set RequiredFiles=%%B
GoTo Check
))
If %MissingFiles%==true (Echo Ошибка: не найдены необходимые файлы&Pause&Exit 1)
:: Конец проверки, дальше остальной код скрипта
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:48, 29-02-2012 | #4


Аватара для root221

Старожил


Сообщения: 177
Благодарности: 13

Профиль | Отправить PM | Цитировать


Цитата root221:
cmd.log - Этот файл у меня находится и будет находиться в папке с пакетным файлом, поэтому ему путь не нужен, он должен проверяться в деректории из которой запускается батник и в случае если его рядом не оказалось, тогда создать его и ошибок никаких не выводить (Тоесть продолжать выполнять основной код скрипта.) »
То есть cmd.log, скажем так, в этой проверке добавить в исключние и просто создать его если он не существует и выполнить остальной код скрипта

Отправлено: 06:49, 01-03-2012 | #5


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
:: Полные или относительные пути к файлам для проверки, разделённые символом ;
Set RequiredFiles=file1.exe;C:\file2.exe;%WinDir%\file3.exe;cmd.log
:Check
For /F "tokens=1,* delims=;" %%A In ("%RequiredFiles%") Do (
If Not "%%A"=="" (
If Not Exist "%%A" (
If "%%A"=="cmd.log" (Echo.>cmd.log&GoTo Check)
Echo Ошибка: Не найден файл "%%A"
)
Set RequiredFiles=%%B
GoTo Check
))
Если в списке файлов для проверки есть cmd.log, и его не существует - он создастся (пустой) и скрипт продолжит свою работу. На этот раз именно то, что нужно?
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:41, 02-03-2012 | #6


Аватара для root221

Старожил


Сообщения: 177
Благодарности: 13

Профиль | Отправить PM | Цитировать


Anonymоus, нет он не показывает все файлы которые не доступны, только по одному, который скажем так первый попадётся, тот и покажет...

предыдущий показывает нормально...

Отправлено: 21:39, 02-03-2012 | #7


Аватара для root221

Старожил


Сообщения: 177
Благодарности: 13

Профиль | Отправить PM | Цитировать


Anonymоus,

Решено:

Код: Выделить весь код
:Check
For /F "tokens=1,* delims=;" %%A In ("%RequiredFiles%") Do (
If Not "%%A"=="" (
If Not Exist "%%A" (Set MissingFiles=true
If "%%A"=="cmd.log" (Echo.>cmd.log&GoTo Check)
Echo Ошибка: Не найден файл "%%A"
)
Set RequiredFiles=%%B
GoTo Check
))
If %MissingFiles%==true (Echo Ошибка: Не найдены необходимые файлы&>nul Pause&Exit 1)
Anonymоus,

Блин)) Не решено((

В общем удаляю файл cmd.log запускаю скрипт, он создаёт cmd.log, и пишет

Код: Выделить весь код
Не найдены необходимые файлы
И пока ещё раз не перезапустишь, работать он как правило не будет...

Как решить?

так начинаю понимать из за чего это происходит) Как раз таки из-за того что я добавил

Код: Выделить весь код
:Check
For /F "tokens=1,* delims=;" %%A In ("%RequiredFiles%") Do (
If Not "%%A"=="" (
If Not Exist "%%A" (Set MissingFiles=true
If "%%A"=="cmd.log" (Echo.>cmd.log&GoTo Check)
Echo Ошибка: Не найден файл "%%A"
)
Set RequiredFiles=%%B
GoTo Check
))
If %MissingFiles%==true (Echo Ошибка: Не найдены необходимые файлы&>nul Pause&Exit 1)

Последний раз редактировалось root221, 02-03-2012 в 22:08.


Отправлено: 21:58, 02-03-2012 | #8


Аватара для root221

Старожил


Сообщения: 177
Благодарности: 13

Профиль | Отправить PM | Цитировать


Что никто кроме Anonymоus, не может мне помочь?

Отправлено: 00:42, 03-03-2012 | #9


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


root221, вот так у вас работает? Я несколько раз проверил, если cmd.log не существует - он молча его создает и продолжает работу, о не найденных файлах не пишет.
Код: Выделить весь код
:Check
For /F "tokens=1,* delims=;" %%A In ("%RequiredFiles%") Do (
	If Not "%%A"=="" (
		If Not Exist "%%A" (
		If "%%A"=="cmd.log" Echo.>cmd.log&GoTo Check
		Set MissingFiles=true
		Echo Ошибка: Не найден файл "%%A"
		)
	Set RequiredFiles=%%B
	GoTo Check
	)
)
If "%MissingFiles%"=="true" (Echo Ошибка: Не найдены необходимые файлы&>nul Pause&Exit 1)
У вас вот тут
Цитата root221:
If Not Exist "%%A" (Set MissingFiles=true If "%%A"=="cmd.log" (Echo.>cmd.log&GoTo Check) »
если файла не существовало, MissingFiles присваивалось значение true, вне зависимости от того, что это за файл был. Я перенес проверку на cmd.log одной строкой выше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:31, 03-03-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Упрощенная проверка файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Проверка наличия файлов в папке lesha73 Скриптовые языки администрирования Windows 2 17-01-2012 16:45
VBS/WSH/JS - Проверка и удаление файлов AndrewZ Скриптовые языки администрирования Windows 2 04-03-2011 16:56
Проверка файлов на изменение и их удаление in-com AutoIt 0 04-11-2010 09:41
Конкурс - Упрощенная настройка беспроводной сети в Windows 7 OSZone Microsoft Windows 7 0 29-12-2009 13:30
Проверка защищенных файлов SergOst Microsoft Windows NT/2000/2003 11 15-10-2006 18:07




 
Переход