Показать полную графическую версию : [решено] Узнать имя подпапки
tehnik_srs
18-04-2010, 13:19
Добрый день!
Есть проблема: на 30 компах есть папка вида "D:\WORK\%UserName%"
%UserName%" - у каждого пользователя разная, подскажите, пожалуйста, как узнать имя этой папки.
Имя этой папки равно
$sPath = 'D:\Work\' & @UserName
tehnik_srs
18-04-2010, 13:34
К сожалению, нет. @UserName и %UserName% не совпадают
очень странно, т.к. у меня совпадает.
ну тогда попробуй так
#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 - Библиотека для работы с кодировками строк (http://autoit-script.ru/index.php?topic=510.0)
tehnik_srs
18-04-2010, 14:12
Хм, дело в том, что эту папку создает сам пользователь и называет ее как захочет, например:
@UserName = "Бухгалтер"
а папка называется:
"D:\WORK\Тетя Клава"
tehnik_srs, в таком случае рекомендую тебе изучить что такое переменные окружения, которое ты пытался использовать в первом посте.
если переменная задана в системе как %Username% то при вызове через echo система покажет его значение. а то что ты пытаешься сделать, это определить какую же папку создал пользователь. ИМХО, это нереально. по какому критерию ты пытаешься это сделать? или же в папке 'D:\Work' находится всего одна папка?
266903582
18-04-2010, 17:32
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)
tehnik_srs
18-04-2010, 17:58
Почему-то не работает
tehnik_srs
18-04-2010, 18:20
Все, нашел, если кому-нибудь нужно
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)
266903582
18-04-2010, 19:44
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)
Если же нужны папки с файлами, то достаточно убрать фильтрацию имен с расширениями и файлы войдут в список...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.