Как в командной строке сделать каталог текущим: 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 -la
total 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 -l
total 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 -l
total 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 -l
total 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 -l
total 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.txt
1
2
3
4
5
username@server:~/test_home$

Данную команду можно использовать в сочетании с командами head и tail для вывода определённого количества строк от начала или конца файла соответственно.

Примеры использования:

username@server:~/test_home$ cat test.txt | head -2
1
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.txt
1 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 , нажмите ввод

Можно так:

  1. Открыть нужную папку
  2. Нажмите [CTRL+L] или нажмите на адресную строку (текущий путь будет выделен)
  3. Введите «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:

  1. Сама Windows по умолчанию использует строковые значения, определенные в ключе Папки оболочки пользователя , и использует строковое значение, определенное в ключе Папки оболочки , только если они не существуют в ключе Папки оболочки пользователя .

  2. 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 после внесения изменений в куст реестра текущего пользователя:

  1. Изменение строки пути строкового значения Desktop под ключом User Shell Folders например с %USERPROFILE%\Desktop на %USERPROFILE%\MyDesktop и конечно же создание каталога %USERPROFILE%\MyDesktop изменяет каталог рабочего стола Windows на пользовательский %USERPROFILE%\MyDesktop при следующем входе в систему, а строковое значение Desktop под ключом Папки оболочки адаптируется Windows при следующем перезапуске. Мною не проверялось, если Desktop под ключом Shell Folders адаптирован также и к простому выходу из системы и входу в систему. Определенно лучше изменить оба строковых значения Desktop одновременно, чтобы навсегда изменить каталог рабочего стола на каталог, отличный от каталога по умолчанию %USERPROFILE%\Рабочий стол .

  2. Удаленное или переименованное строковое значение Desktop под ключом User Shell Folders никогда не воссоздается Windows. Таким образом, возможно, что это строковое значение не существует, если Рабочий стол под ключом User Shell Folders был по ошибке однажды удален или переименован, или файл реестра частично поврежден, в результате чего это строковое значение не существует. Пользователь не заметит эту проблему, как показали дальнейшие тесты ниже.

  3. Строковое значение Desktop типа REG_SZ под ключом Shell Folders всегда устанавливается на расширенный путь %USERPROFILE%\Desktop , если строковое значение Desktop типа REG_ EXPAND_SZ под ключом Папки оболочки пользователя вообще не существует. Windows также автоматически создает каталог %USERPROFILE%\Desktop , если он не существует в этом случае обработки ошибок

    .

  4. Если строковое значение Рабочий стол типа REG_SZ под ключом Папки оболочки и строковое значение Рабочий стол типа REG_EXPAND_SZ под ключом Папки оболочки пользователя равны 90 165 оба удалены или переименованы пользователем или программой, Windows создает при следующем запуске строковое значение Рабочий стол типа REG_SZ под ключом Папки оболочки с расширенным путем %USERPROFILE%\Desktop и также создает каталог, если он не существует. Строковое значение Рабочий стол типа REG_EXPAND_SZ под ключом Папки оболочки пользователя — это , а не , воссозданные Windows.

  5. Если строковое значение 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 , если он еще не существует.