Показать полную графическую версию : [решено] переменная среды не определена
Здравствуйте.
Хотел немного переделать под себя скрипт по смене папки пользователей в виндоус в процессе установки.
Суть переделки - замена переменными путей до папок, чтобы при изменении пути ввести его 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
подскажите - где ошибка
подскажите - где ошибка »
В окне cmd:C:\>help set
Вывод, задание и удаление переменных среды cmd.exe.
SET [переменная=[строка]]
переменная Имя переменной среды.
строка Строка символов, присваиваемая указанной переменной.
<....>
Если при вызове указать только имя переменной без знака равенства и значения,
команда SET выведет значения всех переменных, имя которых начинается
с указанной строки. <...>1. У вас нет знака равенства при попытке присвоения значения переменной.
2. Указывать каталог со знаками равенства в имени (ваше "D:\= Users =") рискованно. Я бы не стал. Можно хотя бы со знаком подчёркивания, входящим в состав допустимых, типа "D:\_ Users _" -- заодно каталог в списке всплывёт наверх.
mwz, спасибо.... я слона то у себя в глазу и проглядел =))
2. Указывать каталог со знаками равенства в имени (ваше "D:\= Users =") рискованно. Я бы не стал. Можно хотя бы со знаком подчёркивания, входящим в состав допустимых, типа "D:\_ Users _" -- заодно каталог в списке всплывёт наверх. »
SET "NEW_USERS_DIR=D:\= Users ="
Но, по-хорошему, действительно — лучше избегать подобного.
ну про знак "=" - может быть, в итоге сделал так, может кому пригодится:
@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
~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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC