Компьютерный форум 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=228975)

root221 28-02-2012 08:15 1868133

Упрощенная проверка файлов
 
Подскажите пожалуйста как можно упростить и сделать это всё через 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%

Anonymоus 28-02-2012 21:31 1868720

Код:

@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

:: =============
:: Здесь основной код скрипта
:: =============


root221 29-02-2012 00:04 1868842

Anonymоus,

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

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

-------

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

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


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

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

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

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

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

Anonymоus 29-02-2012 03:48 1868910

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)
:: Конец проверки, дальше остальной код скрипта


root221 01-03-2012 06:49 1869776

Цитата:

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

То есть cmd.log, скажем так, в этой проверке добавить в исключние и просто создать его если он не существует и выполнить остальной код скрипта

Anonymоus 02-03-2012 09:41 1870641

Код:

:: Полные или относительные пути к файлам для проверки, разделённые символом ;
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, и его не существует - он создастся (пустой) и скрипт продолжит свою работу. На этот раз именно то, что нужно?

root221 02-03-2012 21:39 1871176

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

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

root221 02-03-2012 21:58 1871185

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 03-03-2012 00:42 1871272

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

Anonymоus 03-03-2012 05:31 1871321

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 одной строкой выше.

root221 03-03-2012 11:33 1871394

Anonymоus, Да, отлично всё работает.

Очень вам благодарен за помощь, которую вы мне оказываете)

Спасибо...


Время: 11:37.

Время: 11:37.
© OSzone.net 2001-