【问题标题】:VBScript - Create file with user defined name and extension via cmd.exeVBScript - 通过 cmd.exe 创建具有用户定义名称和扩展名的文件
【发布时间】:2015-02-11 00:56:17
【问题描述】:

对缺少缩进表示歉意。问题是双重的,并且特定于代码的最后一行。 首先,我似乎无法让 %username% 在其上下文中工作......其次是“。& ext”。我尝试输入完整的目标文件夹地址,但无济于事;并尝试为点扩展添加包络引号,但再次无济于事...我对 CMD 有一些经验,但对 VBS 很少...任何帮助表示赞赏!

dim name, app, ext

do
name = inputbox ("Please enter file name", "Make File")
if name = "" then
wscript.quit ()
end if
loop until name <> ""

do while (ext = "")
app = inputbox ("Please enter related application", "Make File")
if app = "" then
wscript.quit ()
elseif lcase(app) = "notepad" then
ext = "txt"
elseif lcase(app) = "word" then 
ext = "doc"
elseif lcase(app) = "excel" then
ext = "xml"
elseif lcase(app) = "powerpoint" then
ext = "ppt"
else
msgbox("Application not recognised")
end if
loop

msgbox "File created in desktop folder"

set objshell = createobject("wscript.shell")
objshell.run "cmd /c echo. > c:\Users\%username%\Desktop\" & name . & ext

【问题讨论】:

    标签: file vbscript cmd export


    【解决方案1】:

    首先,在您的示例中,您的代码最后一行的句号周围缺少一些引号,但我怀疑这只是一个错字,因为它可能仍然无法正常工作。你需要像这样双引号:

    objshell.run "cmd /c echo. > ""c:\Users\%username%\Desktop\" & name &"." & ext & """"
    

    鉴于桌面文件夹是一个“特殊”文件夹,最好不要尝试以您在此处尝试的方式枚举该文件夹 - 在某些环境中,用户配置文件会重新映射到其他地方。

    相反,您可以像这样修改代码的最后几行:

    msgbox "File created in desktop folder"
    set objshell = createobject("wscript.shell")
    desktopFolder = objShell.SpecialFolders("Desktop")                    ' This will get you the desktop folder location...
    
    objshell.run "cmd /c echo. > """& desktopfolder & "\" & name & "." & ext & """"     ' This is messy, but it will likely work.
    

    或者,您可以将整个代码替换为以下示例。您可以使用 case 语句,而不是使用令人困惑的 elseif 代码,而且我不确定您是否知道,但是如果您在 IF 语句上只有一个条件,您可以在同一行键入它们(请参阅下面的例子)。

    此外,鉴于您已经在 VBS 中,您还不如使用 vb 命令创建文件,而不是运行 CMD...。因此,您无需使用 cmd /c echo 行可以使用这样的东西:

     Set objFile = objFSO.CreateTextFile(desktopfolder & "\" & Name & "." & Ext,True)
    

    无论如何,这里有另一个版本的脚本应该适合您。 祝你今天过得愉快 ! :)


    修订版

    Option Explicit                     
    Dim Name, App, Ext
    Dim objShell, objFSO, desktopFolder, objFile
    
    Do
       Name = inputbox ("Please enter file name", "Make File")
       if Name = "" Then Wscript.Quit ()
    Loop until Name <> ""
    
    Do 
       App = inputbox ("Please enter related application", "Make File") 
       If App = "" Then Wscript.Quit ()
       Select Case (LCase(App))
       Case "notepad"
          Ext = "txt"
       Case "word"
          Ext = "doc"
       Case "excel"
          Ext = "xml"
       Case "powerpoint"
          Ext = "ppt"
       Case else    
          msgbox("Application not recognised")
          App = ""
       End Select
    Loop Until App <> ""
    
    set objShell = Createobject("wscript.shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    desktopFolder = objShell.SpecialFolders("Desktop")
    
    Set objFile = objFSO.CreateTextFile(desktopfolder & "\" & Name & "." & Ext,True)
    objFile.Close
    
    msgbox "File created in desktop folder"
    

    【讨论】:

    • 哇! ...非常感谢您提供详细的反馈。 :D 我知道我的代码的“案例”替代方案,但不是与单个 if 条件的搭配...我尝试了您对我的代码关于桌面文件夹的第一个建议,不幸的是它仍然不能那样工作...我一直在尝试许多不同的安排,但没有快乐。尽管如此,我还是非常感谢您的 VB 替代方案,这是完美的,因为正如您所说,它严格保留了 VB 代码。我感谢您的时间和精力。再次感谢,也祝您度过愉快的一天/一夜! :D
    • 你试过“修改后的建议”吗?我在这里测试过,它似乎工作..?
    • 我尝试了“乱七八糟”的修改,但没有奏效,脚本运行但没有创建文件......现在我不太关心,我更喜欢你的纯VB方法。
    • 等一下...更新我的最后一条评论,我刚刚找到了这些文件,它们是在我的 C:\Users\MYUSERNAME\ 文件夹中创建的,桌面连接到 name 变量。 .. 嗯
    • 啊哈!我明白为什么它不起作用(它缺少斜线)......对此感到抱歉。我的编辑没有保存.. ...
    猜你喜欢
    • 2016-06-30
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2020-04-10
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    相关资源
    最近更新 更多