Показать полную графическую версию : [решено] Упрощенная проверка файлов
Подскажите пожалуйста как можно упростить и сделать это всё через 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
@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
:: =============
:: Здесь основной код скрипта
:: =============
Anonymоus,
Подскажите пожалуйста как можно упростить и сделать это всё через for »
cmd.log если его нету тогда создаём и продолжаем дальше выполнять скрипт....
-------
Сейчас лог файла если нету, то скрипт выдаёт ошибку и пишет что файл cmd.log не наиден, я писал выше его нужно создать если он остсутствует и продолжать дальше выполнять основной код скрипта.
И просил сделать всё через фор.
Если возможно как нибуть можно сделать, что бы показывало каких именно не хватает для продолжения то выводить их имя в консоль...
Исправляю *Надо что бы скрипт полностью проверил все файлы и показал каких имеено не хватает, если все файлы на месте тогда ничего не показывать и продолжать выполнять основной код скрипта..
Обьясняю в дву словах
Нужно чтобы скрипт проверил файлы в дериктории %SystemRoot%\System32, если тут каких то файлов не хватает, кроме cmd.log, тогда показывать каких именно и выводить имена всех файлов, которых не хватает, в консоль.
cmd.log - Этот файл у меня находится и будет находиться в папке с пакетным файлом, поэтому ему путь не нужен, он должен проверяться в деректории из которой запускается батник и в случае если его рядом не оказалось, тогда создать его и ошибок никаких не выводить (Тоесть продолжать выполнять основной код скрипта.)
Anonymоus
29-02-2012, 03:48
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)
:: Конец проверки, дальше остальной код скрипта
cmd.log - Этот файл у меня находится и будет находиться в папке с пакетным файлом, поэтому ему путь не нужен, он должен проверяться в деректории из которой запускается батник и в случае если его рядом не оказалось, тогда создать его и ошибок никаких не выводить (Тоесть продолжать выполнять основной код скрипта.) »
То есть cmd.log, скажем так, в этой проверке добавить в исключние и просто создать его если он не существует и выполнить остальной код скрипта
Anonymоus
02-03-2012, 09:41
:: Полные или относительные пути к файлам для проверки, разделённые символом ;
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, и его не существует - он создастся (пустой) и скрипт продолжит свою работу. На этот раз именно то, что нужно?
Anonymоus, нет он не показывает все файлы которые не доступны, только по одному, который скажем так первый попадётся, тот и покажет...
предыдущий показывает нормально...
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)
Что никто кроме Anonymоus, не может мне помочь?
Anonymоus
03-03-2012, 05:31
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)
У вас вот тут
If Not Exist "%%A" (Set MissingFiles=true If "%%A"=="cmd.log" (Echo.>cmd.log&GoTo Check) »
если файла не существовало, MissingFiles присваивалось значение true, вне зависимости от того, что это за файл был. Я перенес проверку на cmd.log одной строкой выше.
Anonymоus, Да, отлично всё работает.
Очень вам благодарен за помощь, которую вы мне оказываете)
Спасибо...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.