Board logo

标题: [问题求助] 【已解决】VBS如何引用系统环境变量值 [打印本页]

作者: doswork    时间: 2016-8-19 12:40     标题: 【已解决】VBS如何引用系统环境变量值

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

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

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

作者: pcl_test    时间: 2016-8-19 13:34

只想说%HOMEDRIVE%\123还是绝对路径,你的问题是自以为vbs也能像批处理一样直接引用系统变量
作者: yu2n    时间: 2016-8-19 13:37

這個%HOMEDRIVE%不是“相對路徑”,是“環境變量”。
你可以這樣取得環境變量的值:
  1. Set wso = CreateObject("WScript.Shell")
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. strPath = "%HOMEDRIVE%\123"
  4. 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"目录。
  1. Set sh = CreateObject("WScript.Shell")
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. F2 = "%HOMEPATH%\00\11"
  4. if not fso.FolderExists(sh.ExpandEnvironmentStrings("%HOMEPATH%\00\11")) then
  5. fso.CreateFolder sh.ExpandenVironmentStrings(F2)
  6. end if
  7. '不存在目录“%HOMEPATH%\00”
  8. '这样写没解决弹出“路径未找到”提示框的问题……
复制代码

作者: pcl_test    时间: 2016-8-19 20:45

回复 7# doswork

暴力点,不管存不存在都建立
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ws = CreateObject("WScript.Shell")
  3. folder = "%HOMEPATH%\00\11"
  4. 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

版主帮忙补充下代码应该就解决了,我不知道怎么写……   多谢!
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ws = CreateObject("WScript.Shell")
  3. folder = "%HOMEPATH%\00\11"
  4. if fso.FolderExists(ws) then
  5. '什么也不做(这句怎么写?)
  6. else ws.run "cmd /c md """&folder&"", 0
  7. end if
复制代码

作者: pcl_test    时间: 2016-8-19 21:28

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

1、
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ws = CreateObject("WScript.Shell")
  3. folder = ws.ExpandEnvironmentStrings("%HOMEPATH%")&"\00"
  4. If fso.FolderExists(folder) Then ws.run "cmd /c md """&folder&"\11""", 0
复制代码
2、
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ws = CreateObject("WScript.Shell")
  3. folder = ws.ExpandEnvironmentStrings("%HOMEPATH%")&"\00"
  4. 'If fso.FolderExists(folder) Then fso.CreateFolder(folder&"\11")
  5. If fso.FolderExists(folder) Then md(folder&"\11")
  6. Function md(ByVal folder)
  7.     If right(folder,1) <> "\" Then folder=folder&"\"
  8.     arr = Split(folder, "\")
  9.     subfolder = arr(0)
  10.     For i = 1 To UBound(arr)-1
  11.         subfolder = subfolder & "\" & arr(i)
  12.         If Not fso.FolderExists(subfolder) Then fso.CreateFolder(subfolder)
  13.     Next
  14. 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%”)
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ws = CreateObject("wscript.Shell")
  3. folder = ws.ExpandEnvironmentStrings("%HOMEPATH%")&"\00"
  4.   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、路径有空格等特殊字符
  1. ws.Run "cmd /c xcopy """&folder&"\11\666\*.*""  """&folder&"\11\123\"" /e /h /k /y", 1
复制代码
路径没有空格等特殊字符
  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