Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] определить userprofile для windows 7 и windows XP (http://forum.oszone.net/showthread.php?t=215239)

bombording 09-09-2011 14:55 1749675

[решено] определить userprofile для windows 7 и windows XP
 
Добрый день.

Делаю архивацию pst файлов пользователей при выходе из системы следующим скриптом:

Код:

Call \\server\pst\robocopy "%userprofile%" "\\server\pst\%username%" *.pst* /s /COPY:DAT /r:1 /w:1 /np /xo /eta
Скрипт сканирует всю личную папку профиля пользователя на предмет pst файлов. Выходит иногда очень долго. Хотелось бы что бы он сканировал только папку Outlook.
Для этого вместо "%userprofile% нужно вписать (Windows 7 пример) - "%userprofile%\AppData\Local\Microsoft\Outlook. Возможно, ли что бы скрипт проверял пути и подставлял правильный путь к Outlook с учётом ОС пользователя?

Iska 09-09-2011 17:45 1749791

Основываясь на: Where does Microsoft Outlook 2010 save my information and configurations? - Outlook - Office.com и CMD/BAT: использование стандартных GUI-диалогов выбора папки и файла, можно попробовать так:
Код:

@echo off
setlocal

for /f "tokens=2 delims=:" %%i in ('chcp') do (
        set sPrevCP=%%i
        chcp 1251 >nul
)

for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:var objShellApp = new ActiveXObject('Shell.Application');var Folder = objShellApp.NameSpace('shell:Local AppData');try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Folder.Self.Path)};catch (e){};close();" ^
    1^|more`
) do set sLocalAppData=%%i

chcp %sPrevCP% >nul

if defined sLocalAppData (
    set sMSOutlookDataFilesPath=%sLocalAppData%\Microsoft\Outlook

    if exist "!sMSOutlookDataFilesPath!" (
        echo !sMSOutlookDataFilesPath!
    ) else (
        echo Папка [!sMSOutlookDataFilesPath!] не найдена.
    )
) else (
    echo Папка [shell:Local AppData] не найдена.
)

endlocal
exit /b 0


SendMessage 09-09-2011 18:12 1749812

Можно еще так попробовать искать (не проверял):
Код:

for /f "delims=" %%a in ('dir "%userprofile%\Outlook" /b/s/ad ^| findstr /i/e "Outlook"') do set "OutlookDir=%%a"

bombording 10-09-2011 15:07 1750276

Iska, почему то не работает. (

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

Нельзя ли сделать так:

Код:

Проверка системы

Если "проверка системы" = xp  тогда:

outlookdir = %userprofile%\Local Settings\Application Data\Microsoft\Outlook      \\ папка если xp

Иначе

outlookdir = %userprofile%\AppData\Local\Microsoft\Outlook \\ папка если win7

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

\\UPD. Спасибо Iska всё работает.

Iska 10-09-2011 17:35 1750333

Цитата:

Цитата bombording
Iska, почему то не работает. (

Ответ не очень содержательный. Опишите, что Вы делали, как делали, как определили, что «не работает». Что именно «не работает».

Цитата:

Цитата bombording
Но в данных случаях скрипт опять же будет искать, и тратить на это время. »

Нет, «искать и тратить на это время» не будет. Делается попытка получить папку LocalAppData по символьному имени от Проводника. Затем к ней дописывается «Microsoft\Outlook» и проверяется, существует ли такая папка.

SendMessage 11-09-2011 05:13 1750603

Цитата:

Цитата bombording
Нельзя ли сделать так:
Проверка системы
Если "проверка системы" = xp тогда »

Код:

for /f "skip=1 tokens=1-2 delims=." %%a in ('wmic os get version') do set "ver=%%a.%%b"
if %ver% equ 5.1 echo Windows XP

5.0 - Windows 2000
5.2 - Windows Server 2003
6.0 - Windows Vista или Windows Server 2008
6.1 - Windows 7 или Windows Server 2008 R2


Время: 08:59.

Время: 08:59.
© OSzone.net 2001-