Назад | Перейти на главную страницу

прочитать неизвестное имя каталога + скопировать в него

Буду признателен за помощь, пожалуйста. Я пытаюсь скопировать два файла test1.txt и test2.txt в неизвестный каталог, например в каталог «% USERNAME% \ Documents \ test \ 04pql7hw.example». Первый раздел имени каталога представляет собой случайную строку букв и цифр, а второй раздел «пример» является постоянным для каждого компьютера, например, имя каталога может быть «gjl39756.example» или «9kny0x5w.example».

Пока я думаю, что отправной точкой должен быть командный файл, который копирует список подкаталогов каталога "% USERNAME% \ Documents \ test" в текстовый документ и сохраняет его в том же каталоге.

dir /ad >list.txt

Поскольку единственный подкаталог в каталоге «% USERNAME% \ Documents \ test» - это неизвестный каталог, например «04pql7hw.example», итоговый текстовый документ всегда будет иметь имя каталога в той же строке и тех же позициях символов в файле. вот пример полученного list.txt

    Volume in drive C has no label.
 Volume Serial Number is 82CE-AEC8

 Directory of C:\Users\%USERNAME%\Test\

08/08/2009  02:51    <DIR>          .
08/08/2009  02:51    <DIR>          ..
06/08/2009  22:49    <DIR>          04pql7hw.example
               0 File(s)              0 bytes
               3 Dir(s)  430,968,176,640 bytes free

Затем я подумал, что vbscript может прочитать эту строку и символы, а затем использовать эту информацию для копирования двух файлов в неизвестную папку.

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

Set FS = CreateObject("Scripting.FileSystemObject")
    Set f1 = fs.OpenTextFile("%USERNAME%\test\", 1, False)
myarr = split(f1.ReadAll, vbnewline)
f1.close
mystr = mid( myarr(8), 36, 16)

Если я подхожу к этому с совершенно неправильной точки зрения, пожалуйста, скажите мне ... Заранее спасибо за любую помощь по этому вопросу. С уважением, Алекс

Чтение и синтаксический анализ списка каталогов - это один из способов (хотя я бы использовал в этом случае "dir / ad / b", чтобы упростить синтаксический анализ), хотя это своего рода хакерство. Вы также можете перечислить подкаталоги каталога с помощью FileSystemObject, что было бы моим предпочтительным способом.

http://www.microsoft.com/technet/scriptcenter/guide/sas_scr_jozd.mspx?mfr=true

Вы можете использовать команды оболочки Windows «FOR» и «SET», чтобы указать имя каталога в переменной среды. Затем вы можете использовать эту переменную для копирования файлов по мере необходимости.

Предположим, у меня есть следующий "неизвестный" каталог:

C:\test>dir
 Volume in drive C has no label.
 Volume Serial Number is 54B3-BFB6

 Directory of C:\test

08/11/2009  01:02 PM    <DIR>          .
08/11/2009  01:02 PM    <DIR>          ..
08/11/2009  01:02 PM    <DIR>          04pql7hw.example
               0 File(s)              0 bytes
               3 Dir(s)  125,798,892,032 bytes free

C:\test>

В командной строке я могу сделать это:

для / F% i in ('dir / ad / b * example') установите foo =% i

I can now echo foo to prove it has been assigned the directory name:

C:\test>echo %foo%
04pql7hw.example

C:\test>

Теперь вы можете копировать на досуге.

ВНИМАНИЕ - если вы поместите эти команды в сценарий оболочки, не забудьте удвоить знаки% с% i до %% i, примерно так:

echo off
for /F %%i in ('dir /ad /b *example') do set foo=%%i
echo %foo%

Это то, что тебе нужно?

Мне было скучно, поэтому я быстро сделал это для тебя. Надеюсь, поможет:

Option Explicit

Dim fsIn, strParentFolder, objSubFolder, colSubFolders, strDestinationFolder
Dim strSearchTerm, strRootFolder

strSearchTerm = ".example"
strRootFolder = "%USERNAME%\Documents\test"


Set fsIn = CreateObject("Scripting.FileSystemObject") 

If Not fsIn.FolderExists(strRootFolder) Then
    WScript.Echo "The parent folder (" & strRootFolder & ") does not exist. Exiting script"
    WScript.quit
End If

Set strParentFolder = fsIn.GetFolder(strRootFolder) 
Set colSubFolders = strParentFolder.SubFolders 

For Each objSubFolder In colSubFolders
    If InStr(strSearchTerm,objSubFolder.Name) > 0 Then
        wscript.Echo objSubFolder.Name & " is the destination folder"
        strDestinationFolder = objSubFolder.Name
    End If
Next 
  • Просто замените ".example" в строке 6 на то, что вы хотите найти в имени папки.

  • Измените "% USERNAME% \ Documents \ test" на родительскую папку, в которой вы хотите искать.

  • strDestinationFolder - это переменная, содержащая результат (имя папки, которую вы ищете)