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

Nun-Nun 16-05-2009 20:38 1120284

Из-за чего появляется проблема доступа и как лечится?
 
При работе скрипта при выполнении команд CD, DEL и т.п. выскакивает сообщение, что нет доступа к файлу/папке (а может к диску) из-за его возможного использования другим процессом. В чём причина и как лечить? Может это связано с использованием в скрипте команды SetLocal EnableExtensions?

Vadikan 17-05-2009 12:00 1120584

Nun-Nun, наверное, нужно привести скрипт, способ его запуска, указать ОС, свои права, расклад по дискам...

Nun-Nun 19-05-2009 14:06 1122303

Vadikan, запуск из cmd-файла (папка не имеет значения); ОС - XP SP3 (со всеми обновами) NTFS; права - админ.; диски: C: , D: , E: , F: , G: - все SCSI HDD, не разбитые на логические диски; H: , I: - DVD-шники; J: - виртуальный диск UltraISO.
Некоторые пояснения относительно скрипта: скрипт сделан для автоматизации процесса распаковки обновлений и их интеграции в дистрибутив MS Office 2003. Сейчас скрипт работает, но для первоначального размещения дистрибутива пришлось отказаться от использования временной папки C:\XPCD\$OEM$\$1\install\Applications\Office2003 и сразу копировать его с DVD-шника в конечную папку C:\Temp\New_Distrib, т.к. по названной в первом посте причине ни переименовать, ни удалить временную папку, ни перенести из неё обновлённый дистрибутив в конечную (целевую) папку C:\Temp\New_Distrib при использовании в конце скрипта команд CD, DEL и MOVE не удавалось.
Прошу не судить слишком строго, поскольку это мой первый опыт по созданию такого рода скрипта. И буду весьма признателен, если укажете в нём ещё какие-то недостатки.

P.S. Я знаю, что для моей цели на форуме уже есть готовый интегратор, но мне хотелось самостоятельно реализовать идею такого процесса в том виде, как я это понимаю. Тут хоть какой-то небольшой, но всё-таки мой собственный опыт.

Код:


TITLE Обновление дистрибутива MS Office 2003
CLS
@echo off
COLOR 1B

SetLocal EnableExtensions
SET SystemTemp=C:\Temp
SET FileTemp1="C:\Temp\Microsoft Office 2003 Setup(0001).txt"
SET FileTemp2="C:\Temp\Microsoft Office 2003 Setup(0002).txt"
SET FileTemp3="C:\Temp\Microsoft Office 2003 Setup(0001)_Task(0001).txt"
SET FileTemp4="C:\Temp\Microsoft Office 2003 Setup(0001)_Task(0002).txt"
SET OfficeTemp1=01_Office2003SP3-KB923618-FullFile-RUS-MAINSP3.msp
SET OfficeTemp2=01_Office2003SP3-KB923618-FullFile-RUS-OWC11SP3.msp
SET NamePath=C:\Temp\O2003updates
SET NamePathTemp=C:\Temp\O2003updates\Temp
SET Spisok1=%NamePathTemp%\Spisok1.txt
SET Spisok2=%NamePathTemp%\Spisok2.txt
SET LabelCD=Office11
REM SET DistrTemp=C:\XPCD\$OEM$\$1\install\Applications\Office2003
SET NewDistrib=C:\Temp\New_Distrib
SET ExceptionFile1=Office2003SP3-KB923618-FullFile-RUS.exe
REM SET ExceptionFile2=Ork.exe

ECHO.
ECHO Запущен процесс извлечения файлов из SP3 для MS Office 2003...
ECHO.
MD %NamePathTemp%
DIR /b Office2003SP3-KB923618-FullFile-RUS.exe >"%NamePathTemp%\Spisok1.txt"
FOR /F "Delims=" %%A In (%Spisok1%) DO (
        MD %NamePathTemp%\%%~nA
        %%A /Q /C /T:C:\Temp\O2003updates\Temp\%%~nA
        REN %NamePathTemp%\%%~nA\MAINSP3.msp 01_Office2003SP3-KB923618-FullFile-RUS-MAINSP3.msp
        REN %NamePathTemp%\%%~nA\OWC11SP3.msp 01_Office2003SP3-KB923618-FullFile-RUS-OWC11SP3.msp
        DEL %NamePathTemp%\%%~nA\OWC102003SP3.msp
        MOVE %NamePathTemp%\%%~nA\*.msp %NamePath%
        RD /S /Q %NamePathTemp%\%%~nA
        DEL %NamePathTemp%\Spisok1.txt
)
ECHO.
ECHO Извлечение файлов из SP3 выполнено успешно!
ECHO.
ECHO Извлекаются файлы из других файлов-обновлений для MS Office 2003....
ECHO.
Dir /b *.exe >"%Spisok2%"
For /F "Delims=" %%I In (%Spisok2%) Do (
        If /I Not %%I==%ExceptionFile1% (
                If /I Not %%I==%ExceptionFile2% (
                        MD %NamePathTemp%\%%~nI
                        %%I /Q /C /T:C:\Temp\O2003updates\Temp\%%~nI
                        REN %NamePathTemp%\%%~nI\*.msp %%~nI.msp
                        MOVE %NamePathTemp%\%%~nI\*.msp %NamePath%
                        RD /S /Q %NamePathTemp%
                )
        )
)

ECHO.
ECHO Извлечение файлов выполнено успешно!
ECHO.
ECHO Идёт поиск дистрибутива MS Office 2003...
ECHO.
wmic /? 1>nul
FOR /F "tokens=2* delims==" %%k in ('wmic path Win32_LogicalDisk where VolumeName^=^"%LabelCD%^" get name /value') DO (
        ECHO Дистрибутив MS Office 2003 найден, файлы копируются на жёсткий диск...
        CD /d %%k&Setup.exe /a /qb MSINODISABLEMEDIA=1 COMPANYNAME="" INSTALLLOCATION=%NewDistrib% PIDKEY=XXXXXXXXXXXXXXXXXXXXXXXXX
        ECHO.
        ECHO Дистрибутив успешно скопирован!
        GOTO :NEXT
)
IF NOT EXIST %LabelCD% GOTO :END
ECHO.
:NEXT
ECHO.
ECHO Выполняется интеграция SP3 в дистрибутив MS Office 2003...
ECHO.
msiexec /p %NamePath%\01_Office2003SP3-KB923618-FullFile-RUS-MAINSP3.msp /a %NewDistrib%\STD11.msi SHORTFILENAMES=TRUE /qb
msiexec /p %NamePath%\01_Office2003SP3-KB923618-FullFile-RUS-OWC11SP3.msp /a %NewDistrib%\OWC11.MSI SHORTFILENAMES=TRUE /qb
DEL %NamePath%\%OfficeTemp1% %NamePath%\%OfficeTemp2%
ECHO SP3 интегрирован, выполяется интеграция других файлов-обновлений...
ECHO.
FOR %%f IN (%NamePath%\*.msp) DO msiexec /p %%f /a %NewDistrib%\Std11.msi SHORTFILENAMES=TRUE /qb
RD /S /Q %NamePath%
DEL %FileTemp1% %FileTemp2% %FileTemp3% %FileTemp4%
ECHO Интеграция SP3 и других файлов-обновлений выполнена успешно!
ECHO.
ECHO Обновлённый дистрибутив MS Office 2003 находится в папке C:\Temp\New_Distrib
ECHO.
pause
EXIT
ECHO.
:END
ECHO Дистрибутив MS Office 2003 не найден!
ECHO Вставьте диск с дистрибутивом в дисковод и запустите процесс снова!
ECHO.
pause
EXIT


Nun-Nun 22-05-2009 22:36 1125302

Так лечится или нет? И если да, то как?


Время: 22:31.

Время: 22:31.
© OSzone.net 2001-