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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Узнать имя подпапки

Ответить
Настройки темы
[решено] Узнать имя подпапки

Аватара для tehnik_srs

Пользователь


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


Конфигурация

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


Добрый день!
Есть проблема: на 30 компах есть папка вида "D:\WORK\%UserName%"
%UserName%" - у каждого пользователя разная, подскажите, пожалуйста, как узнать имя этой папки.

Отправлено: 13:19, 18-04-2010

 

Аватара для kaster

Старожил


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

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


Имя этой папки равно
Код: Выделить весь код
$sPath = 'D:\Work\' & @UserName

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 13:27, 18-04-2010 | #2



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

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


Аватара для tehnik_srs

Пользователь


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

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


К сожалению, нет. @UserName и %UserName% не совпадают

Отправлено: 13:34, 18-04-2010 | #3


Аватара для kaster

Старожил


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

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


очень странно, т.к. у меня совпадает.
ну тогда попробуй так
Код: Выделить весь код
#include <encoding.au3>
$pid = Run(@ComSpec & ' /c echo %username%', '', @SW_HIDE, 0x1 + 0x2)

$sUserName = ''
While 1
	$tmp = StdoutRead($pid)
	$err = @error
	If StringLen($tmp) > 0 Then $sUserName &= $tmp
	If $err Then ExitLoop
Wend
$sUserName = _Encoding_OEM2ANSI($sUserName)
$sUserName = StringReplace($sUserName, @CR, '')
$sUserName = StringReplace($sUserName, @LF, '')
$sPath = 'D:\Work\' & $sUserName
ConsoleWrite($sPath & @CRLF)
Библиотеку брать тут - Encoding UDF - Библиотека для работы с кодировками строк

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 13:55, 18-04-2010 | #4


Аватара для tehnik_srs

Пользователь


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

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


Хм, дело в том, что эту папку создает сам пользователь и называет ее как захочет, например:
@UserName = "Бухгалтер"
а папка называется:
"D:\WORK\Тетя Клава"

Отправлено: 14:12, 18-04-2010 | #5


Аватара для kaster

Старожил


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

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


tehnik_srs, в таком случае рекомендую тебе изучить что такое переменные окружения, которое ты пытался использовать в первом посте.
если переменная задана в системе как %Username% то при вызове через echo система покажет его значение. а то что ты пытаешься сделать, это определить какую же папку создал пользователь. ИМХО, это нереально. по какому критерию ты пытаешься это сделать? или же в папке 'D:\Work' находится всего одна папка?

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 15:22, 18-04-2010 | #6


Пользователь


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

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


tehnik_srs, вот способ узнать первую подпапку в указанной папке:
Код: Выделить весь код
$tmp=""
$vvar=FileFindFirstFile("d:\work\*")
While 1
	$tmp=FileFindNextFile($vvar)
	if StringLeft(StringRight($tmp,4),1)<>"." And StringLeft(StringRight($tmp,5),1)<>"." And $tmp<>"" Then ExitLoop
WEnd
ConsoleWrite($tmp&@cr)

-------
Информация для размышления
Такому в вузах не научат


Отправлено: 17:32, 18-04-2010 | #7


Аватара для tehnik_srs

Пользователь


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

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


Почему-то не работает

Отправлено: 17:58, 18-04-2010 | #8


Аватара для tehnik_srs

Пользователь


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

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


Все, нашел, если кому-нибудь нужно

Global $Found

FileView("D:\Work", 0)

Func FileView($sPath = @ScriptDir, $Flag = 1)
Local $sRet
Local $Find_First = FileFindFirstFile($sPath & "\*.*")
If @error Then Return

While 1
$FindNext = FileFindNextFile($Find_First)
If @error Then ExitLoop
$Full_File = $sPath &"\"& $FindNext
If StringInStr(FileGetAttrib($Full_File), "D") Then
$Found &= $Full_File
$sRet = FileView($Full_File, $Flag)
ElseIf $Flag Then
$Found &= $Full_File
EndIf
WEnd
FileClose($Find_First)
EndFunc

MsgBox(4096, "", $Found)

Отправлено: 18:20, 18-04-2010 | #9


Пользователь


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

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


tehnik_srs, удовлетворяющее решение не соответствует заголовку темы.
А результата (список папок) можно добиться проще:
Код: Выделить весь код
$tmp=""
$out=""
$vvar=FileFindFirstFile("d:\work\*")
While 1
	$tmp=FileFindNextFile($vvar)
	if @error Then ExitLoop
	if StringLeft(StringRight($tmp,4),1)<>"." And StringLeft(StringRight($tmp,5),1)<>"." And $tmp<>"" Then $out&=$tmp&@CR
WEnd
;~ ConsoleWrite($out)
MsgBox(0,"Список папок",$out)
Если же нужны папки с файлами, то достаточно убрать фильтрацию имен с расширениями и файлы войдут в список...

-------
Информация для размышления
Такому в вузах не научат


Отправлено: 19:44, 18-04-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Узнать имя подпапки

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - Как узнать имя пользователя в MS Access? st031 Программирование и базы данных 0 30-08-2009 18:24
VBA - Как узнать имя процесса-родителя akkorn Программирование и базы данных 4 16-03-2009 11:33
как узнать имя компьютера из файла? ad4 Microsoft Windows NT/2000/2003 6 16-11-2006 11:20
Как узнать имя процесса по смещению Andre505 Программирование и базы данных 2 27-09-2003 13:55
Как узнать имя Домена Guest Microsoft Windows 95/98/Me (архив) 2 10-10-2002 16:24




 
Переход