返回列表 发帖

[问题求助] 【已解决】VBS如何引用系统环境变量值

本帖最后由 doswork 于 2016-8-19 17:39 编辑

请老手帮忙解答下,多谢!

目的:在“相对路径”目录下新建文件夹,怎么实现?
      原来直接建立没有问题,突然发现“相对路径”无法操作了……
Set Fso = CreateObject("Scripting.FileSystemObject")
'通常的建立文件夹,没有问题
Fso.CreateFolder("c:\123")
'想用“相对路径”替换,但总提示“路径未找到”,可能解决很简单,但新手就不知道怎么解决了……
Fso.CreateFolder("%HOMEDRIVE%\123")COPY
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

只想说%HOMEDRIVE%\123还是绝对路径,你的问题是自以为vbs也能像批处理一样直接引用系统变量
1

评分人数

    • doswork: 版主确实很严谨的,学习了~技术 + 1

TOP

這個%HOMEDRIVE%不是“相對路徑”,是“環境變量”。
你可以這樣取得環境變量的值:
Set wso = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = "%HOMEDRIVE%\123"
fso.CreateFolder wso.ExpandenVironmentStrings(strPath)COPY
1

评分人数

    • doswork: 多谢“yu2n”老师帮助!技术 + 1
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 3# yu2n


    繁体没有“變量”这个词吧,找个台湾人问问
1

评分人数

    • yu2n: 『環境變數』技术 + 1

TOP

本帖最后由 doswork 于 2016-8-19 17:35 编辑

回复 2# pcl_test


    用词不准确,确实应该说环境变量……
   新手嘛,第一反应就是简单“替换”了,然后发现行不通……
   多谢版主更正~

TOP

回复 3# yu2n


    多谢提供方法!
   这个方法确实管用,新手知道的方法有限,查阅资料也没有直接解决……

TOP

本帖最后由 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”
'这样写没解决弹出“路径未找到”提示框的问题……COPY

TOP

回复 7# doswork

暴力点,不管存不存在都建立
Set fso = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("WScript.Shell")
folder = "%HOMEPATH%\00\11"
ws.run "cmd /c md """&folder&"", 0COPY

TOP

本帖最后由 doswork 于 2016-8-19 20:54 编辑

回复 8# pcl_test


    多谢版主提示~

   不过这里还不想暴力强制建立目录,因为想应用的环境是“桌面”和“desktop”(通过判断来二选一的创建文件/文件夹),暴力建立目录的后果就是程序多了会多很多 文件/文件夹 出来,比较麻烦,所以看有没有判断的方式来解决……

TOP

回复 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 ifCOPY

TOP

本帖最后由 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""", 0COPY
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 FunctionCOPY
1

评分人数

    • doswork: 多谢版主指导~技术 + 1

TOP

回复 11# pcl_test


    多谢版主,不过两种方式的结果还是“暴力建立”目录 "%HOMEPATH%\00\11",当没有"%HOMEPATH%\00"时,不是不做任何操作,还是强制建立目录。

   可能我想的简单了,还不太好实现

TOP

本帖最后由 pcl_test 于 2016-8-19 22:18 编辑

回复 12# doswork


    已改,被你10楼代码误导

TOP

回复 13# pcl_test


    呵呵,多谢版主!  我也是绕进去了~

TOP

本帖最后由 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 ", 1COPY
1

评分人数

    • pcl_test: 指定回应某楼层的在相应楼层点回复,少引用PB -3

TOP

返回列表