сценарий vb: Попытка открыть командную строку, перейти в каталог и запустить команду

#vbscript #dos

#vbscript #dos

Вопрос:

Мне нужно написать скрипт, который просматривает каталог, находит последний zip-файл (там есть .zip и .log), затем открывает командную строку в другом каталоге и запускает следующую команду:

 loaddb.bat -Dlc.file="C:Program FilesXyEnterpriseSDL LiveContentdata_oldexport<name of the newest file.zip>" -Dlc.pswd=<oor password> RESTORE
  

Мы не можем установить какие-либо языки, поэтому он должен быть способен запускаться на сервере Windows 2003 и 2008, поэтому я выбрал vbscript…

У меня все работает, кроме запуска команды, и, похоже, я не могу ее взломать.

Мой код выглядит следующим образом:

 Dim fileNewest
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder("C:Program FilesXyEnterpriseSDL LiveContentdataexport")

For Each aFile In oFolder.Files
sExtension = fso.GetExtensionName(aFile.Name)
    If sExtension = "log" Then
            'Msgbox "The file extension is a " amp; sExtension
        Else
            'Msgbox "The file extension is a " amp; sExtension
                         If fileNewest = "" Then
                        Set fileNewest = aFile  
                     Else
                     If fileNewest.DateCreated < aFile.DateCreated Then
                            Set fileNewest = aFile
                     End If
                    End If
                End If
Next
Msgbox "The Newest File in the folder is " amp; fileNewest.Name amp; chr(13) amp; "Size: " amp; fileNewest.Size amp; " bytes" amp; chr(13) amp; "Was last modified on " amp; FileNewest.DateLastModified 

Dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.Run "%comspec% /k c: amp; cd ../../../Program FilesXyEnterpriseSDL LiveContentdataexport"
  

Как я могу теперь запустить команду после открытия этой строки Dos?

Спасибо,

Редактировать:

Добавление ответа сработало с большой помощью от Алекса К.:

 objShell.Run "%comspec% /k c: amp; cd ""C:Program Files (x86)XyEnterpriseSDL LiveContent"" amp; """"loaddb RESTORE -Dlc.file=C:PROGRA~2XYENTE~1SDLLIV~1dataImport" amp; fileNewest.Name amp; " -Dlc.pswd=N2kAs72z"""""
  

Комментарии:

1. Какие факты говорят в пользу использования командной строки для выполнения программы?

2. Извините, я не уверен, что вы имеете в виду. Мне нужно запустить команду loaddb.bat с путем к файлу, который меняется каждые 12 часов (выбирается из скрипта)

3. Я вижу. ss64.com/vb/run.html содержит пример. Найдите слово ‘DIR’. Надеюсь, это то, что вы ищете.

Ответ №1:

Вам нужно заключить этот путь в кавычки, поскольку он содержит пробелы;

 objShell.Run "%comspec% /k c: amp; cd ""../../../Program FilesXyEnterpriseSDL LiveContentdataexport"""
  

Комментарии:

1. Я создал xxx.bat в разделе «C:Program Files BBC iPlayer Desktop » и это работает для меня: objShell.Run "%comspec% /k c: amp; cd ""C:Program FilesBBC iPlayer Desktop"" amp; ""xxx.bat"""

2. Блестяще, у меня тоже запущен файл test.bat, так что спасибо. Как мне теперь передать имя zip-файла в эту строку?

3. как насчет "%comspec% /k c: amp; cd ""PATHHERE"" " amp; """" amp; fileNewest.Name amp; """"

4. Понял: objShell. Запустите «%comspec% /k c: amp; cd «»C:Program Files (x86)XyEnterpriseSDL LiveContent»» amp; «»»»loaddb RESTORE -Dlc.file=C:PROGRA ~2XYENTE ~1SDLLIV ~1dataImport» amp; fileNewest. Name amp; » -Dlc.pswd=N2kAs72z»»»»»

5. Я попытался указать путь в -Dlc.file с помощью » но это не сработало, независимо от того, сколько я вставил с обеих сторон, поэтому я решил просто использовать сокращенные имена DOS, и это сработало.