Буду признателен за помощь, пожалуйста. Я пытаюсь скопировать два файла 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 - это переменная, содержащая результат (имя папки, которую вы ищете)