![读取未知目录名称 + 复制到该目录](https://linux22.com/image/490538/%E8%AF%BB%E5%8F%96%E6%9C%AA%E7%9F%A5%E7%9B%AE%E5%BD%95%E5%90%8D%E7%A7%B0%20%2B%20%E5%A4%8D%E5%88%B6%E5%88%B0%E8%AF%A5%E7%9B%AE%E5%BD%95.png)
我将不胜感激您的帮助。我试图将两个文件“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%
这就是你需要的吗?