Запуск внешней команды с использованием строк, загруженных из текстового файла

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

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

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

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

Моя проблема заключается в том, что когда я вызываю внешнюю команду из цикла, я не могу правильно понять синтаксис для присоединения строк, которые я извлекаю из текстовых файлов, в тандеме с фактическим вызовом 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

person Nanuk    schedule 12.01.2017    source источник


Ответы (1)


Справочник по оператору объединения чтения (&) .

В конечном итоге командная строка должна выглядеть так, как если бы вы набрали ее в командной строке (подтвердите 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 (см. Метод запуска (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
person JosefZ    schedule 12.01.2017