Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переменная среды не определена

Ответить
Настройки темы
CMD/BAT - [решено] переменная среды не определена

Новый участник


Сообщения: 18
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: ~Cache~
Дата: 08-12-2014
Описание: дополнено информацией
Здравствуйте.
Хотел немного переделать под себя скрипт по смене папки пользователей в виндоус в процессе установки.
Суть переделки - замена переменными путей до папок, чтобы при изменении пути ввести его 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
подскажите - где ошибка

Отправлено: 12:33, 08-12-2014

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата ~Cache~:
подскажите - где ошибка »
В окне cmd:
Цитата:
C:\>help set
Вывод, задание и удаление переменных среды cmd.exe.

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

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

<....>

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

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:14, 08-12-2014 | #2



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

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


Новый участник


Сообщения: 18
Благодарности: 0

Профиль | Отправить PM | Цитировать


mwz, спасибо.... я слона то у себя в глазу и проглядел )

Отправлено: 13:17, 08-12-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:36, 08-12-2014 | #4


Новый участник


Сообщения: 18
Благодарности: 0

Профиль | Отправить PM | Цитировать


ну про знак "=" - может быть, в итоге сделал так, может кому пригодится:
Код: Выделить весь код
@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~, 08-12-2014 в 16:03. Причина: изменил, исходя из комментов выше


Отправлено: 15:59, 08-12-2014 | #5

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


~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 и попробуйте зайти в неё Проводником.

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 08-12-2014 в 23:28.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:07, 08-12-2014 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переменная среды не определена

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Дата окончания поставок ПК с предустановленной Windows 7 не определена OSZone News Новости и события Microsoft 0 10-12-2013 11:30
2007 - Ошибки в Ворде. "Ошибка! Источник ссылки не найден" и "Ошибка! Закладка не определена Pavelasd Microsoft Office (Word, Excel, Outlook и т.д.) 5 14-10-2012 23:55
CMD/BAT - [решено] Как сказать, что это не переменная, а текст? mrtwister Скриптовые языки администрирования Windows 1 04-05-2012 18:54
CMD/BAT - [решено] Два файла - как одна переменная, переменная - как параметр taravasya Скриптовые языки администрирования Windows 6 16-02-2010 04:49
[решено] Выход из функции, если переменная не задана D_Master AutoIt 2 19-02-2009 15:05




 
Переход