PDA

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


~Cache~
08-12-2014, 12:33
Здравствуйте.
Хотел немного переделать под себя скрипт по смене папки пользователей в виндоус в процессе установки.
Суть переделки - замена переменными путей до папок, чтобы при изменении пути ввести его 1 раз а не 3
Скрипт запускается из консоли, вызванной по Shift+F10 на экране создания пользователя, при установке ОС
@ECHO OFF

SETLOCAL enabledelayedexpansion


SET OLD_USERS_DIR "C:\Users"
SET NEW_USERS_DIR "D:\= Users ="
SET BAK_USERS_DIR "D:\Users_BACKUP"

IF EXIST %NEW_USERS_DIR% ECHO BackUp %NEW_USERS_DIR%
IF EXIST %NEW_USERS_DIR% MOVE /Y %NEW_USERS_DIR% %BAK_USERS_DIR%

robocopy %OLD_USERS_DIR% %NEW_USERS_DIR% /E /COPYALL /XJ

rmdir %OLD_USERS_DIR% /S /Q
mklink /J %OLD_USERS_DIR% %NEW_USERS_DIR%

ATTRIB +H +S +R +A %NEW_USERS_DIR%

REG ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList" /v "ProfilesDirectory" /t REG_EXPAND_SZ /d %"NEW_USERS_DIR"%

SHUTDOWN -r -f -t 5
но возникла проблема - выдает что переменная среды не определена, при этом ругается на переменные:
OLD_USERS_DIR и BAK_USERS_DIR
подскажите - где ошибка

mwz
08-12-2014, 13:14
подскажите - где ошибка »

В окне cmd:C:\>help set
Вывод, задание и удаление переменных среды cmd.exe.

SET [переменная=[строка]]

переменная Имя переменной среды.
строка Строка символов, присваиваемая указанной переменной.

<....>

Если при вызове указать только имя переменной без знака равенства и значения,
команда SET выведет значения всех переменных, имя которых начинается
с указанной строки. <...>1. У вас нет знака равенства при попытке присвоения значения переменной.
2. Указывать каталог со знаками равенства в имени (ваше "D:\= Users =") рискованно. Я бы не стал. Можно хотя бы со знаком подчёркивания, входящим в состав допустимых, типа "D:\_ Users _" -- заодно каталог в списке всплывёт наверх.

~Cache~
08-12-2014, 13:17
mwz, спасибо.... я слона то у себя в глазу и проглядел =))

Iska
08-12-2014, 14:36
2. Указывать каталог со знаками равенства в имени (ваше "D:\= Users =") рискованно. Я бы не стал. Можно хотя бы со знаком подчёркивания, входящим в состав допустимых, типа "D:\_ Users _" -- заодно каталог в списке всплывёт наверх. »
SET "NEW_USERS_DIR=D:\= Users ="
Но, по-хорошему, действительно — лучше избегать подобного.

~Cache~
08-12-2014, 15:59
ну про знак "=" - может быть, в итоге сделал так, может кому пригодится:
@ECHO OFF

TITLE Create User Folders...

COLOR 0A

SET "OLD_USERS_DIR=C:\Users"
SET "NEW_USERS_DIR=D:\_ Users _"
SET "BAK_USERS_DIR=D:\Users_BACKUP"

COLOR 0C

IF EXIST %NEW_USERS_DIR% (
IF NOT EXIST %BAK_USERS_DIR% MKDIR %BAK_USERS_DIR%
ATTRIB -H -S -R -A %NEW_USERS_DIR%
MOVE /Y %NEW_USERS_DIR% %BAK_USERS_DIR%
) ELSE (
MKDIR %NEW_USERS_DIR%
)

COLOR 0A

robocopy %OLD_USERS_DIR% %NEW_USERS_DIR% /E /COPYALL /XJ

rmdir %OLD_USERS_DIR% /S /Q
mklink /J %OLD_USERS_DIR% %NEW_USERS_DIR%

ATTRIB +H +S +R +A %NEW_USERS_DIR%

REG ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList" /v "ProfilesDirectory" /t REG_EXPAND_SZ /d %NEW_USERS_DIR% /f

rem SHUTDOWN -r -f -t 5

mwz
08-12-2014, 23:07
~Cache~, чисто стилевые соображения:

1. Папки создаются без атрибута A. Поэтому снимать, а в дальнейшем устанавливать на них этот атрибут вообще бессмысленно: атрибутом А у файлов, и только файлов, пользуются лишь некоторые программы архивирования (снимают этот атрибут когда файл ими уже заархивирован). Для папок он вообще никакой роли не играет.
Атрибуты R, H, S у только что созданной папки также сброшены.

2. Атрибут R (и в некоторых случаях S) для папок несёт только задание для них особых функций (меняет поведение папок при наличии внутри папки соответствующего файла Desktop.ini, описывающего особые свойства папки; в простейшем случае – устанавливает её значок, в более сложных – вообще меняет поведение папки при просмотре её Проводником). Поэтому устанавливать для папок по крайней мере атрибут R без необходимости не следует: он абсолютно не означает, что файлы внутри папок будут доступны только для чтения, или что папку нельзя будет удалить без потверждения.

Пример: создайте пустую папку, положите в неё файл desktop.ini с содержимым

[.ShellClassInfo]
CLSID={645FF040-5081-101B-9F08-00AA002F954E}
LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-8964

и любой другой файл (например, пустой test.txt) или пустую папку; затем присвойте в окне CMD этой папке атрибут +R и попробуйте зайти в неё Проводником.




© OSzone.net 2001-2012