Как в командной строке сделать каталог текущим: CD и CHDIR — сменить каталог .
Содержание
Текущий каталог | Linux: Введение
Файловая система не только систематизирует данные, но и является основой метафоры «рабочего места» в Linux. Каждая выполняемая программа «работает» в строго определённом каталоге файловой системы. Такой каталог называется текущим каталогом, можно представлять, что программа во время работы «находится» именно в этом каталоге, это её «рабочее место». В зависимости от текущего каталога может меняться поведение программы: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущем каталоге — до них она «дотянется» в первую очередь. Текущий каталог есть у любой программы, в том числе и у командной оболочки (shell) пользователя. Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь «находится» в том каталоге, который в данный момент является текущим каталогом его командной оболочки.
Все команды, отдаваемые пользователем при помощи shell, наследуют текущий каталог shell, т. е. «работают» в том же каталоге. По этой причине пользователю важно знать текущий каталог shell. Для этого служит утилита
pwd
:
[methody@localhost methody]$ pwd /home/methody [methody@localhost methody]$
Пример 1. Текущий каталог: pwd
pwd
(аббревиатура от print working directory) возвращает полный путь текущего каталога командной оболочки, естественно, именно той командной оболочки, при помощи которой была выполнена команда pwd
. В данном случае Мефодий узнал, что в этот момент (на этой виртуальной консоли) текущим является каталог «/home/methody
».
Почти все утилиты, с которыми работал Мефодий в предыдущих лекциях, по умолчанию читают и создают файлы в текущем каталоге. Так, Мефодий обращался к файлам, не используя никаких путей, просто по имени. Например, использовал утилиту cat
, чтобы вывести на экран содержимое файла «text
».
[methody@localhost methody]$ cat text File: info.info, Node: Help-Cross, Up: Cross-refs The node reached by the cross reference in Info . . . [methody@localhost methody]$ cat /home/methody/text File: info.info, Node: Help-Cross, Up: Cross-refs The node reached by the cross reference in Info
Пример 2. Полный и относительный путь к файлу
В действительности, командная оболочка, прежде чем передавать параметр «text
» (имя файла) утилите cat
, подставляет значение текущего каталога — получается полный путь к этому файлу в файловой системе: «/home/methody/text
». Содержимое именно этого файла утилита cat
выведет на экран.
Вообще говоря, в нескольких разных каталогах файловой системы могут оказаться файлы с именем «text
», именно поэтому командная оболочка всегда передаёт программам и утилитам «точный адрес» файла в файловой системе — полный путь.
Набирая только имя файла без пути к текущему каталогу, Мефодий воспользовался относительным путём к этому файлу.
- относительный путь
- Путь к объекту файловой системы, не начинающийся в корневом каталоге. Для каждого процесса Linux определён текущий каталог, с которого система начинает относительный путь при выполнении файловых операций.
Относительный путь строится точно так же, как и полный — перечислением через «/
» всех названий каталогов, встретившихся при движении к искомому каталогу или файлу. Между полным путём и относительным есть только одно существенное различие: относительный путь начинается от текущего каталога, в то время как полный путь всегда начинается от корневого каталога. Относительный путь любого файла или каталога в файловой системе может иметь любую конфигурацию: чтобы добраться до искомого файла можно двигаться как по направлению к корневому каталогу, так и от него (см. раздел Filesystem_use.Перемещение по дереву каталогов). Linux различает полный и относительный пути очень просто: если имя объекта начинается на «/
» — это полный путь, в любом другом случае — относительный.
Пользователь может обращаться к файлу при помощи полного или относительного пути — результат будет совершенно тот же. Так, команды cat text
и cat /home/methody/text
, отданные Мефодием, дали одинаковый результат, поскольку выводился один и тот же файл. Если в относительном пути встречаются символы «/
», рассматриваются подкаталоги текущего каталога, их подкаталоги и т. д. Короче говоря, относительный путь строится по тем же правилам, что и полный, с той разницей, что относительный путь начинается не с символа «/
». Сам текущий каталог, каков бы ни был полный путь к нему, всегда имеет ещё одно обозначение, «.
», которое можно использовать, если по каким-то причинам требуется, чтобы даже в относительном пути к файлу, находящемуся в текущем каталоге, присутствовал элемент «имя каталога». Так, пути «text
» и «./text
» тоже приводят к одному и тому же файлу, однако в первом случае в строке пути не содержится ничего, кроме имени файла.
Отделить путь к файлу от его имени можно с помощью команд dirname
и basebane
соответственно:
[methody@localhost methody]$ basename /home/methody/text text [methody@localhost methody]$ basename text text [methody@localhost methody]$ dirname /home/methody/text /home/methody [methody@localhost methody]$ dirname ./text . [methody@localhost methody]$ dirname text
Пример 3. Использование dirname
и basename
Мефодий заметил, что для «text
» и «./text
» dirname
выдало одинаковый результат: «.», что понятно: как было сказано выше, эти формы пути совершенно эквивалентны, а при автоматической обработке результатов dirname
гораздо лучше получить «.
», чем пустую строку.
Основные команды SSH — Общие вопросы
В данной статье рассматриваются основные команды, используемые при работе с файлами и директориями при подключении к серверу по SSH-протоколу.
Для подключения можно использовать терминал в вашей ОС, утилиту PuTTY или же веб-консоль в панели управления. Подробнее см. в статье статье «Подключение по SSH».
Обратите внимание, что команды необходимо вводить в нижнем регистре. Например, pwd — корректное имя команды, Pwd — некорректное.
Навигация
Вывод текущей рабочей директории
Для вывода информации о текущей рабочей директории используется команда pwd
.
Пример использования:
username@server:~$ pwd/home/u/username
Вывод содержимого директории
Чтобы посмотреть содержимое директории, воспользуйтесь командой ls
.
Вывод содержимого текущей директории в несколько колонок (только имена файлов и директорий):
ls .
Вывод содержимого текущей директории в одну колонку (только имена файлов и директорий):
ls -1
Вывод подробной информации о содержимом текущей директории, включая скрытые файлы (имя которых начинается с точки):
ls -la
Вывод содержимого конкретной директории:
ls имя_директории
Пример использования:
username@server:~$ ls -latotal 16
drwx------ 4 username customers 4096 Mar 10 12:56 .
![]()
drwx------ 14 username customers 4096 Mar 10 12:55 ..
-rw------- 1 username customers 0 Mar 10 12:56 .htaccess
drwx------ 2 username customers 4096 Mar 10 12:55 test
drwx------ 2 username customers 4096 Mar 10 12:55 test1
-rw------- 1 username customers 0 Mar 10 12:55 test.txt
где «.» — текущий каталог, а «..» — родительский каталог.
Перемещение между директориями
Команда cd
позволяет выполнить переход в другую директорию.
Основные способы применения:
Перейти в директорию, которая находится в текущей директории:
cd dirname
Перейти в родительский каталог (на уровень выше):
cd ..
Перейти в домашний каталог:
cd
# Либо:
cd ~
Перейти в домашний каталог по абсолютному пути (начиная с корня):
cd /home/u/username
Перейти в предыдущий каталог:
cd -
Примеры использования:
# Текущая директория отображается после двоеточия и до символа "$".![]()
# Перейти в каталог media
username@server:~$ cd /home/u/username/public_html/media
# Перейти в каталог cms
username@server:~/public_html/media$ cd cms
# Перейти в домашний каталог
username@server:~/public_html/media/cms$ cd
# Перейти в предыдущий каталог
username@server:~$ cd -
/home/u/username/public_html/media/cms
# Перейти на уровень выше
username@server:~/public_html/media/cms$ cd ..
username@server:~/public_html/media$
Наверх
Действия с файлами и каталогами
Создание директорий
Команда для создания директорий — mkdir
.
Создать директорию:
mkdir имя_директории
Создать сразу несколько директорий:
mkdir имя_директории1 имя_директории2
Создать дерево директорий:
mkdir -p /имя_директории1/имя_директории2
Пример использования:
username@server:~/test_home/test$ ls -ltotal 0
username@server:~/test_home/test$ mkdir dir1
username@server:~/test_home/test$ ls -l
total 4
drwx------ 2 username customers 4096 Mar 10 13:16 dir1
Создание файлов
Для создания файлов можно использовать различные команды, например:
Создать новый файл при его отсутствии (если файл существует, содержимое файла не изменяется):
touch test.txt
Создать новый файл при его отсутствии (если файл существует, то команда удаляет его содержимое):
> test.txt
Создать новый файл при его отсутствии и записать в него строку «test» (если файл существует, то команда заменяет его содержимое на строку «test»):
echo "test" > test.txt
Вы можете выбрать удобный для вас способ или использовать любой другой.
Также можно создать файл с помощью текстового редактора. На наших серверах доступен nano
:
nano имя_файла
При этом файл сразу будет открыт для редактирования.
Чтобы сохранить изменения и закрыть файл, в nano можно воспользоваться сочетанием клавиш Crtl X → Y → Enter.
Копирование файлов и каталогов
Копирование каталогов и файлов осуществляется с помощью команды cp
.
Основные способы применения:
Скопировать файл test.txt в файл test1.txt (файл test.txt должен присутствовать в текущей директории):
cp test.txt test1.txt
Скопировать директорию dir1 в директорию dir2, включая всё содержимое (ключ -r означает рекурсивное копирование, директория dir1 должна присутствовать в текущей директории):
cp -r dir1 dir2
Перемещение и переименование файлов
Перемещение и переименование файлов выполняется при помощи команды mv
.
Основные способы применения:
Переименовать файл test.txt в test2.txt (файл test.txt должен присутствовать в текущей директории):
mv test.txt test2.txt
Переместить файл test2.txt в директорию dir (файл и директория должны присутствовать в текущей директории):
mv test2.txt dir
Примеры использования:
username@server:~/test_home$ ls -ltotal 4
drwx------ 2 username customers 4096 Mar 10 13:37 dir
-rw------- 1 username customers 0 Mar 10 13:37 test.txt
username@server:~/test_home$ mv test.txt test2.txt
username@server:~/test_home$ ls -l
total 4
drwx------ 2 username customers 4096 Mar 10 13:37 dir
-rw------- 1 username customers 0 Mar 10 13:37 test2.
txt
username@server:~/test_home$ mv test2.txt dir
username@server:~/test_home$ ls dir
test2.txt
Удаление файлов и каталогов
Для удаления объектов используйте команду rm
.
Основные способы применения:
Удалить файл test.txt в текущем каталоге:
rm test.txt
Удалить все файлы в определенной директории:
rm /путь/к/файлам/*
Удалить все файлы с расширением .txt в определенной директории:
rm /путь/к/файлам/*.txt
Удалить директорию и все ее содержимое:
rm -r имя_директории
Для того, чтобы при удалении каждого файла запрашивалось подтверждение, можно использовать ключ -i
:
rm -i /путь/к/файлам/*.txt
Если же файлов много и вы точно уверены в необходимости их удаления, можно использовать противоположную опцию -f
, тогда удаление будет выполнено без подтверждения:
rm -f /путь/к/файлам/*.txt
Создание ссылок
Ссылки при работе по SSH-протоколу создаются командой ln
.
Основные способы применения:
Создать жёсткую ссылку:
ln file1 file2
Создать символьную ссылку:
ln -s file1 file2
Примеры использования:
username@server:~/test_home$ ls -ltotal 0
-rw------- 1 username customers 0 Mar 10 14:08 test.txt
username@server:~/test_home$ ln -s test.txt link
username@server:~/test_home$ ls -l
total 0
lrwxrwxrwx 1 username customers 8 Mar 10 14:08 link -> test.txt
-rw------- 1 username customers 0 Mar 10 14:08 test.txt
Изменение прав доступа к файлам и директориям
Команда chmod
позволяет настроить права доступа к файлам и директориям.
Основные способы применения:
Изменение прав на xxxx для файла file (file должен существовать в текущей директории):
chmod xxxx file
Изменение прав на xxxx для директории dir (dir должна существовать в текущей директории):
chmod xxxx dir
Примеры использования:
username@server:~/test_home$ ls -ltotal 4
drwx------ 2 username customers 4096 Mar 10 14:39 dir
-rw------- 1 username customers 0 Mar 10 14:39 test.
txt
username@server:~/test_home$ chmod 0644 test.txt
username@server:~/test_home$ ls -l
total 4
drwx------ 2 username customers 4096 Mar 10 14:39 dir
-rw-r--r-- 1 username customers 0 Mar 10 14:39 test.txt
username@server:~/test_home$ chmod 0777 dir/
username@server:~/test_home$ ls -l
total 4
drwxrwxrwx 2 username customers 4096 Mar 10 14:39 dir
-rw-r--r-- 1 username customers 0 Mar 10 14:39 test.txt
Работа с содержимым файлов
Конкатенация содержимого файлов
Команда cat
позволяет выполнить конкатенацию (объединение) содержимого файлов и печать его в стандартный поток вывода. Данная команда зачастую используется просто для просмотра содержимого файла.
Примеры использования:
username@server:~/test_home$ cat test.txt1
2
3
4
5
username@server:~/test_home$
Данную команду можно использовать в сочетании с командами head
и tail
для вывода определённого количества строк от начала или конца файла соответственно.
Примеры использования:
username@server:~/test_home$ cat test.txt | head -21
2
username@server:~/test_home$ cat test.txt | tail -1
5
Данные команды позволяют вывести 2 первых строки и 1 последнюю строку файла test.txt.
Поиск по содержимому файла
grep — это популярная команда, позволяющая найти содержимое файлов.
Например, у нас есть файл test1.txt, который имеет следующее содержимое:
username@server:~/test_home$ cat test1.txt
1 first string
2 second string
3 another example of a string
4 something in here
5 andalsohere
Примеры использования grep
:
username@server:~/test_home$ grep 'string' test1.txt1 first string
2 second string
3 another example of a string
username@server:~/test_home$ grep 'th' test1.txt
3 another example of a string
4 something in here
username@server:~/test_home$ grep 'here' test1.
txt
4 something in here
5 andalsohere
Данная команда имеет огромное количество способов применения. За дополнительной информацией вы можете обратиться к официальной документации, либо к свободным источникам в интернете.
Поиск файлов
Используйте команду find
, чтобы найти нужный файл.
Основные способы применения:
Поиск файлов и каталогов с именем «test» в текущей директории:
find ./ -name 'test'
Поиск в текущей директории файлов и каталогов, имена которых начинаются на «test» и далее содержат любое количество любых символов:
find ./ -name 'test*'
Поиск в домашней директории файлов и каталогов, имена которых начинаются на «test» и далее содержат любое количество любых символов:
find ~/ -name 'test*'
Поиск файлов с расширением «.php» в домашней директории:
find ~/ -name '*.php'
Пример использования:
username@server:~/test_home$ find ./ -name 'test*'
./test.txt
Архивы
Создать архив директории:
tar -cf имя_архива.tar имя_директории
Пример использования:
# Заархивировать директорию /home/u/user/директория_сайта/public_html/media/
# 1.Перейти в каталог, в котором находится директория media:
username@server:~$ cd /home/u/user/имя_сайта/public_html/
# 2.Выполнить команду архивации, задав удобное имя архива:
username@server:~/имя_сайта/public_html$ tar -cf имя_архива.tar media
Распаковать архив .tar в текущую директорию:
tar -xvf архив.tar
Процесс создания или распаковки тяжелых архивов может завершаться принудительно в связи с установленными ограничениями на использование процессами процессоров сервера.
В таких случаях для архивирования в .tar вы можете использовать следующую команду, которая позволит ограничить скорость архивации и снизить использование ресурсов процессора.
tar -cf - имя_директории| pv -L 2M > имя_архива.tar
Для удобства команда может быть расширена, чтобы отобразить в консоли счетчик времени, оставшегося до завершения процесса, и вывести уведомление (END) о его завершении (позволит проконтролировать, что процесс не прервался и был выполнен успешно).
tar -cf - имя_директории | pv -L 2M -cN tar -s $(du -sb имя_директории | grep -o '[0-9]*') > имя_архива.tar && echo "END"
Для распаковки большого архива .tar можно воспользоваться командой:
pv -L 2M имя_архива.tar | tar xfv - -C ./имя_директории_назначения
Аналогично для распаковки архивов .tar.gz:
pv -L 1M имя_архива.tar.gz | tar zxfv - -C ./имя_директории_назначения
Распаковка .tar.gz с уведомлением о завершении:
pv -L 1M имя_архива.tar.gz | tar zxfv - -C ./имя_директории_назначения && echo "END"
Распаковать архив .rar в текущую директорию:
unrar x архив.rar
Распаковать архив . zip в текущую директорию:
unzip архив.zip
Для распаковки тяжелых .zip-архивов:
pv -L 1M имя_архива.zip | unzip-stream имя_директории_назначения
Базы данных
Создание дампа базы данных:
mysqldump -u'база_данных' база_данных -p'пароль_базы_данных' > имя_дампа.sql
Импорт данных из дампа в базу данных:
mysql -u'база_данных' база_данных -p'пароль_базы_данных' < имя_дампа.sql
Проверка базы данных на наличие ошибок:
mysqlcheck -c -u'база_данных' база_данных -p'пароль_базы_данных'
Восстановление базы данных при наличии ошибок:
mysqlcheck -r -u'база_данных' база_данных -p'пароль_базы_данных'
Подробнее о восстановлении баз данных и решении возможных ошибок см. в статье Восстановление базы данных.
Подключение к серверу баз данных:
mysql -u имя_базы_данных -p
Нажмите Enter, после чего введите пароль базы.
Получение информации о параметрах MySQL:
SHOW VARIABLES LIKE 'параметр';SHOW SESSION VARIABLES LIKE 'параметр';
# Например:
SHOW SESSION VARIABLES LIKE 'max_join_size';
Завершение работы процессов
Завершить текущие процессы можно командой killall. Например, для завершения процессов веб-сервера Apache:
killall -9 apache2
Обратите внимание! После выполнения данной команды для перезапуска обработчиков Apache необходимо изменить версию обработчика php в разделе «Сайты».
Аналогично для других сервисов, например:
killall -9 vsftpd
Завершение процесса MySQL:
mysqladmin -u'база_данных' -p'пароль_базы_данных' kill id_запроса
Для просмотра процессов MySQL используйте:
mysqladmin -u'база_данных' -p'пароль_базы_данных' pr
Для завершения процессов MySQL можно также использовать утилиту pt-kill.
Дисковое пространство
Вывод информации о текущей дисковой квоте (в квоту не включается информация по базам данных):
quota -s
Вывести размер файлов и директорий в текущем каталоге:
du -sch *
Анализ дискового пространства аккаунта (сканирует корневой каталог):
ncdu
Просканировать файлы конкретную директорию:
ncdu имя_директории
Подробнее об использовании утилиты ncdu смотрите в статье Анализ дискового пространства.
Другие вспомогательные команды
Вывод истории команд:
history
Очистить экран (сочетание клавиш Ctrl-L):
clear
Закрыть подключение по SSH (сочетание клавиш Ctrl-D):
exit
Сочетания клавиш
- Ctrl-C — прервать выполнение текущей команды.
- Ctrl-Shift-C — копировать выделенный фрагмент (в интерфейсе PuTTY копирование осуществляется простым выделением).
- Ctrl-Shift-V — вставить (в интерфейсе PuTTY вставка осуществляется нажатием на правую кнопку мыши).
cmd — Как быстро открыть текущий каталог из командной строки? ОС — Windows
спросил
Изменено
3 месяца назад
Просмотрено
32к раз
Необходимо быстро открыть текущий каталог из командной строки.
Я знаю, что есть команда проводник
.
Но вводить полный путь к каталогу очень неудобно.
Например:
exoplorer c:\progra~1\nodejs~1\workskp~1\project\module\convert
Работает. Но разве что быстрее можно открыть папку мышкой… Думаю, это не правильно.
И эта команда:
explorer cd.
Открывает Мои документы
. Хотя я в другом каталоге.
Подскажите пожалуйста!
- окна
- cmd
- команда
- командная строка
- проводник
Вы можете попробовать:
start .
или
проводник.
.
— это ярлык для текущего каталога.
В командной строке PowerShell:
ii .
ii
является ярлыком для Invoke-Item
.
2
Используйте .
для указания текущего каталога:
проводник.
Просто чтобы добавить к ответам выше (проверено на Windows 10)
Открыть текущий каталог
проводник.исследователь ... исследователь .... исследователь ....... начинать . начинать ... начинать .... начинать ........
Открыть подпапку текущего каталога
start .\subfolder проводник .\подпапка
Открыть родительский каталог текущего каталога
Explorer .. начинать ..
Перейти к другой папке из родительского каталога
начало ..\другая-папка проводник ..\другая-папка
Создайте пакетный файл (например, c:\somepath\q.bat) с этой строкой:
explorer .
Добавьте его в свой путь (показанный пример будет работать только в текущей консоли, добавьте его в Свойства системы->Дополнительно->Переменные среды, чтобы он работал где угодно):
set PATH=%PATH%;c:\ какой-то путь
Затем откройте командное окно и введите
q
Тогда он должен открываться самым быстрым способом.
просто добавьте cmd в начало адресной строки Windows.
например: если вы находитесь в [C:\foo\bar]
просто введите cmd [cmd C:\foo\bar] и нажмите Enter. это откроет для вас терминал в C:\foo\bar.
1
- Нажмите CTRL+L
- введите
cmd
, нажмите ввод
Можно так:
- Открыть нужную папку
- Нажмите [CTRL+L] или нажмите на адресную строку (текущий путь будет выделен)
- Введите «cmd» в адресную строку и нажмите , введите
Маленькое изображение с объяснением
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
Пакетный файл
— Как создать каталог в каталоге рабочего стола пользователя?
По умолчанию для каталога рабочего стола Windows определяется как %USERPROFILE%\Desktop
. ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ
— одна из предопределенных переменных среды Windows.
Так что можно было бы использовать просто:
md "%UserProfile%\Desktop\NewDirectory" 2>nul
Это создаст каталог с именем NewDirectory
на рабочем столе пользователя, если пользователь не изменил значение по умолчанию для каталога рабочего стола. Команду md
можно использовать с полным или относительным путем к каталогу. Вывод справки при запуске в командной строке md /?
объясняет, что md
создает все дерево каталогов в несуществующем каталоге, если расширения команд включены по умолчанию. См. также документацию Microsoft по именованию файлов, путей и пространств имен.
Но было бы лучше получить путь к каталогу рабочего стола из реестра Windows, а не просто использовать путь по умолчанию. Есть два ключа реестра, содержащие строковое значение с именем Desktop
с путем к каталогу рабочего стола пользователя:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Этот ключ реестра содержит несколько строк значения обычно типаREG_EXPAND_SZ
, которые определяют пути к различным папкам оболочки, определенным для текущей учетной записи пользователя. Папки оболочки обычно содержат ссылку на переменную среды, например%USERPROFILE%
, что является причиной типаREG_EXPAND_SZ
, что означает, что строковое значение должно быть дополнительно расширено, чтобы получить абсолютный путь к папке оболочки. Приведенный ниже пакетный файл расширяет ссылку на переменную среды с помощью команды CALL , чтобы вызвать еще один анализ командной строки командным процессором Windows.
Например, команда, установленная "DesktopFolder=%%~K"
, становится первой при выполнениидля
команды, установленной "DesktopFolder=%USERPROFILE%\Desktop"
. Эта команда анализируется во второй раз с помощьюcmd.exe
, что-то вродеset "DesktopFolder=C:\Users\UserName\Desktop"
из-за команды, вызовите
перед реальным выполнением команды, установите
для определения среды переменнаяDesktopFolder
с реальным абсолютным именем папки, считанным из реестра Windows.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Этот раздел реестра содержит почти те же строковые значения, что и указанный выше раздел реестра, но строковые значения обычно имеют типREG_SZ
. Этот раздел реестра предназначен для обратной совместимости для приложений, не поддерживающих другой раздел реестра со строковыми значениями со ссылками на переменные среды.
Возможно, папка оболочки определена только в одном из двух разделов реестра. Например, в Windows XP строковые значения Администрирование
, Запись компакт-дисков
, Шрифты
и Последние
существуют только в ключе реестра Папки оболочки
и не существуют в ключе Папки оболочки пользователя
.
Информация, добавленная Compo:
Сама Windows по умолчанию использует строковые значения, определенные в ключе
Папки оболочки пользователя
, и использует строковое значение, определенное в ключеПапки оболочки
, только если они не существуют в ключеПапки оболочки пользователя
.Windows не распространяет изменение строкового значения в ключе
Папки оболочки пользователя
на строковое значение с тем же именем в ключеПапки оболочки
, если пользователь или программа изменяет непосредственно в реестре строковое значение в ключеПользовательская оболочка Папки
без внесения соответствующих изменений в ключ с тем же именем под ключомПапки оболочки
.
Таким образом, в случаеDesktop
в папкахUser Shell
путь к каталогу отличается отРабочий стол
вПапках оболочки
, Windows использует путь, определенный с помощьюРабочий стол
вПапках оболочки пользователя
.
Пользователь может изменить любую папку на любую по своему усмотрению. Но пользователь должен позаботиться о том, чтобы дважды изменить строковое значение в обоих разделах реестра на существующее. Некоторые из папок оболочки можно легко изменить с помощью параметра графического пользовательского интерфейса Windows или приложения Windows, такого как папка оболочки Downloads
.
См. также документацию Microsoft для известных папок и KNOWNFOLDERID и другие страницы документации, на которые есть ссылки на этих страницах, а также документацию по регистрации приложений.
Вот пакетный файл, который максимально безопасно получает каталог рабочего стола пользователя из реестра Windows. >nul’) делать, если /I «%%I» == «Рабочий стол», если не «%%~K» == «» если «%%J» == «REG_SZ» (установить «DesktopFolder =%%~K») иначе, если «%%J» == «REG_EXPAND_SZ» вызывает набор «DesktopFolder=%%~K»
если не определен DesktopFolder, установите «DesktopFolder=\»
если «%DesktopFolder:~-1%» == «\» установите «DesktopFolder=%DesktopFolder:~0,-1%»
если не определен DesktopFolder, установите «DesktopFolder=%UserProfile%\Desktop»
md «%DesktopFolder%\NewDirectory» 2>nul
конечный локальный
Этот пакетный файл работает даже в Windows XP, в которой reg.exe
выводит результаты запроса, отличные от reg.exe
в Windows Vista и более новых версиях Windows.
См. статью Microsoft об использовании операторов перенаправления команд для объяснения 2>nul
, который перенаправляет сообщение об ошибке, выводимое командой MD , в уже существующий каталог для обработки STDERR на устройство NUL для подавления этого сообщения об ошибке. .
Однако каталог пользователя на рабочем столе должен содержать только ярлыки (файлы *.lnk
), а также файлы и каталоги, созданные пользователем на рабочем столе. Ни одна программа не должна создавать другие файлы, кроме файлов ярлыков в каталоге рабочего стола пользователя. Microsoft определила несколько других папок оболочки для приложений, таких как APPDATA
(данные приложения) или LOCALAPPDATA
(данные локального приложения) для приложений.
Некоторые дополнительные сведения об обработке строкового значения Рабочий стол
под ключами Папки оболочки пользователя
и Папки оболочки
Windows, как это наблюдается в Windows XP SP3 x86 с постоянным перезапуском Windows после внесения изменений в куст реестра текущего пользователя:
Изменение строки пути строкового значения
Desktop
под ключомUser Shell Folders
например с%USERPROFILE%\Desktop
на%USERPROFILE%\MyDesktop
и конечно же создание каталога%USERPROFILE%\MyDesktop
изменяет каталог рабочего стола Windows на пользовательский%USERPROFILE%\MyDesktop
при следующем входе в систему, а строковое значениеDesktop
под ключомПапки оболочки
адаптируется Windows при следующем перезапуске.Мною не проверялось, если
Desktop
под ключомShell Folders
адаптирован также и к простому выходу из системы и входу в систему. Определенно лучше изменить оба строковых значенияDesktop
одновременно, чтобы навсегда изменить каталог рабочего стола на каталог, отличный от каталога по умолчанию%USERPROFILE%\Рабочий стол
.Удаленное или переименованное строковое значение
Desktop
под ключомUser Shell Folders
никогда не воссоздается Windows. Таким образом, возможно, что это строковое значение не существует, еслиРабочий стол
под ключомUser Shell Folders
был по ошибке однажды удален или переименован, или файл реестра частично поврежден, в результате чего это строковое значение не существует. Пользователь не заметит эту проблему, как показали дальнейшие тесты ниже.Строковое значение
Desktop
типаREG_SZ
под ключомShell Folders
всегда устанавливается на расширенный путь%USERPROFILE%\Desktop
, если строковое значениеDesktop
типаREG_ EXPAND_SZ
под ключомПапки оболочки пользователя
вообще не существует.Windows также автоматически создает каталог
%USERPROFILE%\Desktop
, если он не существует в этом случае обработки ошибок.
Если строковое значение
Рабочий стол
типаREG_SZ
под ключомПапки оболочки
и строковое значениеРабочий стол
типаREG_EXPAND_SZ
под ключомПапки оболочки пользователя
равны 90 165 оба удалены или переименованы пользователем или программой, Windows создает при следующем запуске строковое значениеРабочий стол
типаREG_SZ
под ключомПапки оболочки
с расширенным путем%USERPROFILE%\Desktop
и также создает каталог, если он не существует. Строковое значениеРабочий стол
типаREG_EXPAND_SZ
под ключомПапки оболочки пользователя
— это , а не , воссозданные Windows.Если строковое значение
Desktop
типаREG_SZ
под ключомShell Folders
существует с другим расширенным путем, чем%USERPROFILE%\Desktop
, как расширенный путь%USERPROFILE%\MyDesktop 90 012 и строковое значение
Рабочий стол
типаREG_EXPAND_SZ
под ключUser Shell Folders
вообще не выходит, Windows игнорирует настроенный путьDesktop
типаREG_SZ
под ключомShell Folders
и устанавливает значение расширенного пути%USERPROFILE%\Desktop
и создает дополнительно каталог%USERPROFILE%\Desktop
, если он еще не существует.