CMD/BAT - [решено] переменная среды не определена

Ответить
Аватара пользователя
~Cache~

CMD/BAT - [решено] переменная среды не определена

Сообщение ~Cache~ »

Здравствуйте.

Хотел немного переделать под себя скрипт по смене папки пользователей в виндоус в процессе установки.

Суть переделки - замена переменными путей до папок, чтобы при изменении пути ввести его 1 раз а не 3

Скрипт запускается из консоли, вызванной по Shift+F10 на экране создания пользователя, при установке ОС



код

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

Re: CMD/BAT - [решено] переменная среды не определена

Сообщение mwz »

Цитата ~Cache~:



подскажите - где ошибка
CMD/BAT - [решено] переменная среды не определена




В окне cmd:
Цитата:



C:\>help set

Вывод, задание и удаление переменных среды cmd.exe.



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



переменная Имя переменной среды.

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







Если при вызове указать только имя переменной без знака равенства и значения,

команда SET выведет значения всех переменных, имя которых начинается

с указанной строки.



1. У вас нет знака равенства при попытке присвоения значения переменной.

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

Re: CMD/BAT - [решено] переменная среды не определена

Сообщение ~Cache~ »

mwz, спасибо.... я слона то у себя в глазу и проглядел Изображение)
Аватара пользователя
~Cache~

Re: CMD/BAT - [решено] переменная среды не определена

Сообщение ~Cache~ »

Цитата mwz:



2. Указывать каталог со знаками равенства в имени (ваше "D:\= Users =") рискованно. Я бы не стал. Можно хотя бы со знаком подчёркивания, входящим в состав допустимых, типа "D:\_ Users _" -- заодно каталог в списке всплывёт наверх.
CMD/BAT - [решено] переменная среды не определена






Код:

Код: Выделить всё

SET "NEW_USERS_DIR=D:\= Users ="

Но, по-хорошему, действительно — лучше избегать подобного.
Аватара пользователя
~Cache~

Re: CMD/BAT - [решено] переменная среды не определена

Сообщение ~Cache~ »

ну про знак "=" - может быть, в итоге сделал так, может кому пригодится:



Код:

Код: Выделить всё

@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

Re: CMD/BAT - [решено] переменная среды не определена

Сообщение mwz »

~Cache~, чисто стилевые соображения:



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

Атрибуты R, H, S у только что созданной папки также сброшены.



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





Скрытый текст

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



[.ShellClassInfo]

CLSID={645FF040-5081-101B-9F08-00AA002F954E}

LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-8964



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

Вернуться в «Скриптовые языки администрирования Windows»