[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 【已解决】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")
复制代码
1

评分人数

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

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

评分人数

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

TOP

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

TOP

回复 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
复制代码

TOP

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

回复 8# pcl_test


    多谢版主提示~

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

TOP

回复 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
复制代码

TOP

本帖最后由 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
复制代码
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%”)
  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
复制代码
1

评分人数

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

TOP

返回列表