Войти

Показать полную графическую версию : 7zip+bat+переменные среды


wiznv
06-06-2013, 11:21
Помогите доработать скрипт.

For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"^|Find /I "Personal"`) Do set Person=%%J
"C:\Program Files\7-Zip\7z.exe" a -t7z -ssw -mx1 -p12345 -scsWIN -mhe "\\10.10.10.10\User_backup$\User\Backup_mydoc.7z" -r %Person%

Пояснение:
ОС - windows XP.
У пользователей переназначен путь к папке Мои документы. Например С:\Ivanov. В связи с этим Путь %USERPROFILE%\Мои документы
- не работает.
Есть параметр в реестре который отвечает за путь к переназнаенной папке. Скрипт этот путь считывает и присваивет переменной %Person%. Далее идет скрипт с ключами для архивации 7zip.

Проблема:
Вобщем, трюк с переменной сработал но частично - не архивируются вложенные папки. Я добавил %Person%\* - в этом случае переменная %Person% не читается и остается только \*. Кавычки не помогают...

Iska
06-06-2013, 11:53
Можете ведь, коллега, если захотите ;).

Сама «корневая» папка «Мои документы» (в примере — «Ivanov») также добавляется в архив:
"C:\Program Files\7-Zip\7z.exe" a -t7z -ssw -mx1 -p12345 -scsWIN -mhe "\\10.10.10.10\User_backup$\User\Backup_mydoc.7z" -r "%Person%\"

«Корневая» папка «Мои документы» (в примере — «Ivanov») в архив не добавляется:
"C:\Program Files\7-Zip\7z.exe" a -t7z -ssw -mx1 -p12345 -scsWIN -mhe "\\10.10.10.10\User_backup$\User\Backup_mydoc.7z" -r "%Person%\*"

А Ваша проблема, как я понимаю, в том, что «reg.exe» выдаёт на выходе кириллицу в ANSI, а не в OEM. Отсюда и переменная окружения «Person» выглядит, например, так:
%USERPROFILE%\╠юш фюъєьхэЄ√
Попробуйте, например, так:
>nul chcp 1251
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"^|Find /I "Personal"`) Do set Person=%%J
>nul chcp 866
echo [%Person%]
"%ProgramFiles%\7-Zip\7z.exe" a -t7z -ssw -mx1 -p12345 -scsWIN -mhe "\\10.10.10.10\User_backup$\User\Backup_mydoc.7z" -r "%Person%\*"

Georgio
10-06-2013, 23:46
wiznv, попробуйте в цикле сделать так:

For /F "UseBackQ Tokens=1,2*" %%I In (
`Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"^|Find /I "Personal"`
) Do (
If %%I==Personal (
Set Person=%%K
)).




© OSzone.net 2001-2012