Войти

Показать полную графическую версию : [решено] определить userprofile для windows 7 и windows XP


bombording
09-09-2011, 14:55
Добрый день.

Делаю архивацию 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
Основываясь на: Where does Microsoft Outlook 2010 save my information and configurations? - Outlook - Office.com (http://office.microsoft.com/en-us/outlook-help/where-does-microsoft-outlook-2010-save-my-information-and-configurations-HP010354943.aspx) и CMD/BAT: использование стандартных GUI-диалогов выбора папки и файла (http://forum.script-coding.com/viewtopic.php?id=4514), можно попробовать так:
@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
Можно еще так попробовать искать (не проверял):
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
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
Iska, почему то не работает. (
Ответ не очень содержательный. Опишите, что Вы делали, как делали, как определили, что «не работает». Что именно «не работает».

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

SendMessage
11-09-2011, 05:13
Нельзя ли сделать так:
Проверка системы
Если "проверка системы" = 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




© OSzone.net 2001-2012