2017-01-12 4 views
1

Я пытаюсь автоматизировать извлечение связки сжатых файлов (.ARJ) в разных каталогах.Запуск внешней команды с использованием строк, загруженных из текстового файла

Я в настоящее время использую 2 текстовые файлы для хранения 2 бита информации:

  1. текущего местоположения и названия сжатых файлов (ARJFileNames.txt) образец - D: \ _Work_Splunk_TestBed Branch00 \ LOAN.ARJ
  2. целевое местоположение для файлов, которые будут извлечены (ARJFileLocations.txt) образца - D: \ _Work_Splunk_TestBed Branch00

Я пытаюсь использовать команду WScript.Shell для запуска W inRAR, чтобы извлечь файлы из их текущего местоположения в целевое местоположение.

Моя проблема в том, что я вызываю внешнюю команду из цикла. Кажется, я не могу получить синтаксис для прикрепления строк, которые я извлекаю из текстовых файлов, в тандеме с фактически вызовом WinRar и его переключателем/команда.

Вот мой текущий код:

'Declaring Constants 
Const ForReading = 1, ForWriting = 2, ForAppending = 3 
'Declaring Variables 
Dim fso, strFilePath, strFileName, fFilePath, fFileName, objShell, WinRAR, strCMD, SevenZip, ARJ 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set objShell = WScript.CreateObject ("WScript.shell")  

'Open Text Files for use 
Set strFilePath  = fso.OpenTextFile("D:\_Work\_Splunk\_TestBed\ARJFileLocations.txt", ForReading, TristateFalse) 
Set strFileName = fso.OpenTextFile("D:\_Work\_Splunk\_TestBed\ARJFileNames.txt", ForReading, TristateFalse) 


Do Until strFilePath.AtEndOfStream 
    fFilePath = strFilePath.ReadLine 'Get the location of the ARJ file 
    fFileName = strFileName.ReadLine 'Get the target location for ARJ file contents 
    'Storing the command as 1 string' 
    strCMD = "winrar x -y " & " " & fFileName & " " & fFilePath 
    'Running the command in CLI' 
    objShell.Run strCMD 
Loop 

'Cleaning Up 
Set strFilePath = Nothing 
Set strFileName = Nothing 
Set objShl = Nothing 

ответ

1

Read Concatenation Operator (&) ссылка.

Командная строка должна появиться в конце концов, как если бы вы ввели его в командной строке (проверить, Wscript.Echo Command):

Command = """" & WinRAR & "\WinRAR.exe"" X " & fDLocation & " " & fTLocation 
'   ↑↑↑↑      ↑↑ 
' results to 
' "D:\Program Files\WinRAR\WinRAR.exe" X ARJLocation TargetLocation 
' ↑         ↑ 

Используйте следующие, если fDLocation или fTLocation содержат пробелы

Command = """" & WinRAR & "\WinRAR.exe"" X """ & fDLocation & """ """ & fTLocation & """" 
'           ↑↑     ↑↑ ↑↑     ↑↑↑↑ 
' results to 
' "D:\Program Files\WinRAR\WinRAR.exe" X "ARJ Location" "Target Location" 
' ↑         ↑ ↑   ↑ ↑    ↑ 

Кроме того , Я бы попробовал запустить сценарий и программу WinRAR.exe синхронно (см. Статью Run Method (Windows Script Host)) следующим образом:

Dim intRunResult 
Do Until strARJLocations.AtEndOfStream 
    fDLocation = strARJLocations.ReadLine  'Get the location of the ARJ file' 
    fTLocation = strTargetLocation.ReadLine 'Get the target location for ARJ file contents' 
    Command = """" & WinRAR & "\WinRAR.exe"" X """ & fDLocation & """ """ & fTLocation & """" 
    intRunResult = objShell.Run (Command, 1, True) 
Loop