Найти всех пользователей, использовать их как переменную, чтобы получить список каталогов appdata из cmd?

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

До сих пор я думал, что могу просто использовать net user > C:\userlist.txt для создания списка пользователей, моя настоящая проблема заключается в том, чтобы захватить имена пользователей и поместить их в следующую команду.

Используя какую-то переменную, я хотел бы, чтобы findstr вытягивал каждого пользователя, чтобы я мог получить список всех каталогов пользователей.

Конечный результат будет выглядеть примерно так:

dir C:\users\$variableforusers\AppData\Roaming > C:\directorylist.txt

Я хотел бы иметь возможность запускать эту команду для каждого каталога appdata пользователей, поэтому эта команда должна будет повторяться в зависимости от того, сколько пользователей имеет конечная машина.

Это будет выполняться из локальной системной учетной записи, поэтому %appdata% не будет работать, поскольку он дает вам только текущую папку appdata пользователя, вошедшего в систему.

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

Спасибо заранее за помощь, ребята!


person ArchitectOfDoom    schedule 03.12.2012    source источник


Ответы (1)


Я думаю, что вы не должны использовать имя пользователя для получения пути к каталогу профиля пользователя. Имя каталога может отличаться от имени пользователя, например, в случае изменения имени пользователя hsa после создания профиля или в случае конфликта имен пользователей (локальный пользователь имеет то же имя пользователя, что и пользователь домена).

Вы можете сделать dir из AppData\Roaming для каждого подкаталога C:\Users, используя следующий синтаксис:

for /d %A in (C:\Users\*) do if exist %A\AppData\Roaming dir %A\AppData\Roaming

Но опять же, в этом решении будут исключены любые профили пользователей, хранящиеся за пределами C:\Users.

Чтобы сделать каталог dir из AppData\Roaming каждого профиля пользователя, вы можете получить пути к профилям пользователей из реестра:

for /f "tokens=3" %A in ('reg query "HKLM\Software\Microsoft\WindowsN T\CurrentVersion\ProfileList" /s /v ProfileImagePath ^| find "REG_EXPAND_SZ"') do @dir %A\AppData\Roaming

Если вы хотите использовать эти команды в сценарии, используйте знаки двойного процента (%%A). Чтобы узнать больше о команде for, введите for /?

person MBu    schedule 31.12.2012
comment
Спасибо МБу! В итоге я просто проанализировал всю папку appdata. Похоже, это сработало для моего сценария. - person ArchitectOfDoom; 31.01.2013