标题: [问题求助] 【已解决】VBS如何引用系统环境变量值 [打印本页]
作者: doswork 时间: 2016-8-19 12:40 标题: 【已解决】VBS如何引用系统环境变量值
本帖最后由 doswork 于 2016-8-19 17:39 编辑
请老手帮忙解答下,多谢!
目的:在“相对路径”目录下新建文件夹,怎么实现?
原来直接建立没有问题,突然发现“相对路径”无法操作了……- Set Fso = CreateObject("Scripting.FileSystemObject")
- '通常的建立文件夹,没有问题
- Fso.CreateFolder("c:\123")
- '想用“相对路径”替换,但总提示“路径未找到”,可能解决很简单,但新手就不知道怎么解决了……
- Fso.CreateFolder("%HOMEDRIVE%\123")
复制代码
作者: pcl_test 时间: 2016-8-19 13:34
只想说%HOMEDRIVE%\123还是绝对路径,你的问题是自以为vbs也能像批处理一样直接引用系统变量
作者: yu2n 时间: 2016-8-19 13:37
這個%HOMEDRIVE%不是“相對路徑”,是“環境變量”。
你可以這樣取得環境變量的值:- Set wso = CreateObject("WScript.Shell")
- Set fso = CreateObject("Scripting.FileSystemObject")
- strPath = "%HOMEDRIVE%\123"
- fso.CreateFolder wso.ExpandenVironmentStrings(strPath)
复制代码
作者: zz100001 时间: 2016-8-19 15:48
回复 3# yu2n
繁体没有“變量”这个词吧,找个台湾人问问
作者: doswork 时间: 2016-8-19 17:33
本帖最后由 doswork 于 2016-8-19 17:35 编辑
回复 2# pcl_test
用词不准确,确实应该说环境变量……
新手嘛,第一反应就是简单“替换”了,然后发现行不通……
多谢版主更正~
作者: doswork 时间: 2016-8-19 17:38
回复 3# yu2n
多谢提供方法!
这个方法确实管用,新手知道的方法有限,查阅资料也没有直接解决……
作者: doswork 时间: 2016-8-19 20:35
本帖最后由 doswork 于 2016-8-19 20:47 编辑
回复 3# yu2n
追问“yu2n”老师另一个问题: fso.CreateFolder 这个语句是创建目录,能不能实现 “WScript.run **,0” 这样的效果?(不弹出提示框)
主要想解决一个问题,比如要创建的目录是"%HOMEPATH%\00\11",但是"%HOMEPATH%\00"都不存在,所以运行后总提示“路径未找到”,把弹出的提示框去掉。
实现效果是:当"%HOMEPATH%\00\11"(没有"%HOMEPATH%\00"目录)不存在时,没有任何提示,也不做任何操作(不去强制建立"%HOMEPATH%\00\11"目录);
当"%HOMEPATH%\00"存在时,建立"%HOMEPATH%\00\11"目录。
- Set sh = CreateObject("WScript.Shell")
- Set fso = CreateObject("Scripting.FileSystemObject")
- F2 = "%HOMEPATH%\00\11"
- if not fso.FolderExists(sh.ExpandEnvironmentStrings("%HOMEPATH%\00\11")) then
- fso.CreateFolder sh.ExpandenVironmentStrings(F2)
- end if
- '不存在目录“%HOMEPATH%\00”
- '这样写没解决弹出“路径未找到”提示框的问题……
复制代码
作者: pcl_test 时间: 2016-8-19 20:45
回复 7# doswork
暴力点,不管存不存在都建立- Set fso = CreateObject("Scripting.FileSystemObject")
- Set ws = CreateObject("WScript.Shell")
- folder = "%HOMEPATH%\00\11"
- ws.run "cmd /c md """&folder&"", 0
复制代码
作者: doswork 时间: 2016-8-19 20:51
本帖最后由 doswork 于 2016-8-19 20:54 编辑
回复 8# pcl_test
多谢版主提示~
不过这里还不想暴力强制建立目录,因为想应用的环境是“桌面”和“desktop”(通过判断来二选一的创建文件/文件夹),暴力建立目录的后果就是程序多了会多很多 文件/文件夹 出来,比较麻烦,所以看有没有判断的方式来解决……
作者: doswork 时间: 2016-8-19 21:03
回复 8# pcl_test
版主帮忙补充下代码应该就解决了,我不知道怎么写…… 多谢!- Set fso = CreateObject("Scripting.FileSystemObject")
- Set ws = CreateObject("WScript.Shell")
- folder = "%HOMEPATH%\00\11"
- if fso.FolderExists(ws) then
- '什么也不做(这句怎么写?)
- else ws.run "cmd /c md """&folder&"", 0
- end if
复制代码
作者: pcl_test 时间: 2016-8-19 21:28
本帖最后由 pcl_test 于 2016-8-19 22:47 编辑
1、- Set fso = CreateObject("Scripting.FileSystemObject")
- Set ws = CreateObject("WScript.Shell")
- folder = ws.ExpandEnvironmentStrings("%HOMEPATH%")&"\00"
- If fso.FolderExists(folder) Then ws.run "cmd /c md """&folder&"\11""", 0
复制代码
2、- Set fso = CreateObject("Scripting.FileSystemObject")
- Set ws = CreateObject("WScript.Shell")
- folder = ws.ExpandEnvironmentStrings("%HOMEPATH%")&"\00"
- 'If fso.FolderExists(folder) Then fso.CreateFolder(folder&"\11")
- If fso.FolderExists(folder) Then md(folder&"\11")
-
- Function md(ByVal folder)
- If right(folder,1) <> "\" Then folder=folder&"\"
- arr = Split(folder, "\")
- subfolder = arr(0)
- For i = 1 To UBound(arr)-1
- subfolder = subfolder & "\" & arr(i)
- If Not fso.FolderExists(subfolder) Then fso.CreateFolder(subfolder)
- Next
- End Function
复制代码
作者: doswork 时间: 2016-8-19 22:06
回复 11# pcl_test
多谢版主,不过两种方式的结果还是“暴力建立”目录 "%HOMEPATH%\00\11",当没有"%HOMEPATH%\00"时,不是不做任何操作,还是强制建立目录。
可能我想的简单了,还不太好实现
作者: pcl_test 时间: 2016-8-19 22:17
本帖最后由 pcl_test 于 2016-8-19 22:18 编辑
回复 12# doswork
已改,被你10楼代码误导
作者: doswork 时间: 2016-8-19 22:43
回复 13# pcl_test
呵呵,多谢版主! 我也是绕进去了~
作者: doswork 时间: 2016-8-23 18:57
本帖最后由 doswork 于 2016-8-23 19:27 编辑
1、2、
pcl_test 发表于 2016-8-19 21:28
追加一个问题请教版主:用方法1的代码,如何将如下的批处理换成VBS版的,关键还是引号的位置,怎么调整才能正确运行? 多谢!
xcopy c:\11\666\*.* c:\11\123\ /e /h /k /y (将“C:\”替换成“%HOMEPATH%”)- Set fso = CreateObject("Scripting.FileSystemObject")
- Set ws = CreateObject("wscript.Shell")
- folder = ws.ExpandEnvironmentStrings("%HOMEPATH%")&"\00"
-
- ws.Run "cmd /c xcopy " "&folder&"\11\666\*.*" "&folder&"\11\123\" " /e /h /k /y ", 1
复制代码
作者: pcl_test 时间: 2016-8-23 19:24
本帖最后由 pcl_test 于 2016-8-23 19:27 编辑
回复 15# doswork
1、sh不知什么鬼
2、路径有空格等特殊字符- ws.Run "cmd /c xcopy """&folder&"\11\666\*.*"" """&folder&"\11\123\"" /e /h /k /y", 1
复制代码
路径没有空格等特殊字符- ws.Run "cmd /c xcopy "&folder&"\11\666\*.* "&folder&"\11\123\ /e /h /k /y", 1
复制代码
作者: doswork 时间: 2016-8-23 19:28
本帖最后由 doswork 于 2016-8-23 19:30 编辑
回复 16# pcl_test
非常感谢!
是我这里设置的 “Set sh = CreateObject("wscript.Shell")” 没完全改过来…… 已经修改了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |