Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Узнать имя подпапки (http://forum.oszone.net/showthread.php?t=173455)

tehnik_srs 18-04-2010 13:19 1395438

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

kaster 18-04-2010 13:27 1395452

Имя этой папки равно
Код:

$sPath = 'D:\Work\' & @UserName

tehnik_srs 18-04-2010 13:34 1395460

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

kaster 18-04-2010 13:55 1395485

очень странно, т.к. у меня совпадает.
ну тогда попробуй так
Код:

#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 - Библиотека для работы с кодировками строк

tehnik_srs 18-04-2010 14:12 1395503

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

kaster 18-04-2010 15:22 1395577

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

266903582 18-04-2010 17:32 1395656

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 1395673

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

tehnik_srs 18-04-2010 18:20 1395685

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

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 1395742

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)

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


Время: 21:53.

Время: 21:53.
© OSzone.net 2001-