读取未知目录名称 + 复制到该目录

读取未知目录名称 + 复制到该目录

我将不胜感激您的帮助。我试图将两个文件“test1.txt”和“test2.txt”复制到一个未知目录中,例如复制到目录“%USERNAME%\Documents\test\04pql7hw.example”中。目录名称的第一部分是一串随机的字母和数字,第二部分“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)

如果我从完全错误的角度来处理这个问题,请告诉我...提前感谢您在这个问题上提供的任何帮助。问候 Alex

答案1

读取和解析目录列表是一种方法(尽管在这种情况下我会使用“dir /ad /b”来使其更易于解析),尽管这有点不合时宜。您也可以使用 FileSystemObject 枚举目录的子目录,这是我的首选方法。

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

答案2

我很无聊,所以我很快为你做了这个。希望它能有所帮助:

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 
  • 只需将第 6 行的“.example”更改为您想要在文件夹名称中搜索的内容即可。

  • 将“%USERNAME%\Documents\test”更改为您要搜索的父文件夹

  • strDestinationFolder 是包含结果(您要查找的文件夹名称)的变量

答案3

您可以使用 Windows shell 命令“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>

在命令行我可以这样做:

对于 ('dir /ad /b *example') 中的 /F %i,请设置 foo=%i

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

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

C:\test>

现在您可以随意复印了。

警告 - 如果将这些命令放入 shell 脚本中,请记住将 % 符号从 %i 加倍变为 %%i,如下所示:

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

这就是你需要的吗?

相关内容