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 с учётом ОС пользователя?
|
Основываясь на: 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 всё работает.
|
Цитата:
Цитата 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.
© OSzone.net 2001-