Как включить шаг vbscript в командный файл? - PullRequest
0 голосов
/ 02 мая 2018

Что я пытаюсь сделать: У меня есть 3 xls файла, которые я получаю по электронной почте, названные так (отметка даты меняется каждый раз):

CDC aaa 01 01 2018.xls
CDC bbb 01 01 2018.xls
CDC ccc 01 01 2018.xls

Я хочу:

  • конвертировать их в CSV
  • назовите их так: aaa.csv, bbb.csv, ccc.csv

Вот мой сценарий, который пока не работает:

@ECHO OFF
setlocal enableextensions enabledelayedexpansion


for %%F in ("*.xls") do ( 
    REM get filename only
    set tmp=%%~F

    REM look for aaa
    echo.!tmp! | findstr /i "aaa" 1>nul
    if errorlevel 1 (
        echo. Not aaa.
    ) ELSE (
        echo. Found aaa
        set fileout=aaa.csv
    )

    REM look for bbb
    echo.!tmp! | findstr /i "bbb" 1>nul
    if errorlevel 1 (
        echo. Not bbb.
    ) ELSE (
        echo. Found bbb.
        set fileout=bbb.csv
    )

    REM look for ccc
    echo.!tmp! | findstr /i "ccc" 1>nul
    if errorlevel 1 (
        echo. Not ccc.
    ) ELSE (
        echo. Found ccc.
        set fileout=ccc.csv
    )
    REM convert and rename file
    xlstocsv.vbs "!tmp!" "!fileout!"
)

Когда я запускаю это, я получаю сообщение об ошибке Windows Script Host :

Script: C:\[bla]\xlstocsv.vbs
Line: 17
Char: 1
Error: The file could not be accessed. Try one of the following:
- Make sure folder exists
- Make sure the folder that contains the file is not read-only
- Make sure the file name does not contain anu of the following characters: < > ? [ ] : CDC aaa 01 01 2018.xls or *
- Make sure the file/path name doesn't contain more than 218 characters
- Code: 800A03EC
- Source: Microsoft Excel

Я могу подтвердить, что файлы / папки не только для чтения, я могу подтвердить, что в пути / имени файла нет специальных символов и путь не длиннее 218 символов.

Я также могу подтвердить, что файлы Excel не повреждены и не повреждены каким-либо образом.

Я также могу сказать, что, хотя я вижу сообщение об ошибке, если я пытаюсь открыть ЛЮБОЙ из 3 файлов в Excel (не только тот, за который я получаю ошибку), Excel выдает точно такую ​​же ошибку, как указано выше.

Если я запускаю этот скрипт, он работает просто отлично:

setlocal enableextensions enabledelayedexpansion

for %%F in ("*.xls") do ( 
    xlstocsv.vbs "%%~nF.xls" "%%~nF.csv"
)

но эта версия скрипта не переименовывает мои файлы в нужные имена файлов, просто меняет расширение.

Вот VBScript:

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit

1 Ответ

0 голосов
/ 11 мая 2018

Учитывая предоставленную структуру именования файлов, следующий скрипт должен выполнить требуемую задачу:

@Echo Off
Set "Ext1=.xls"
Set "Ext2=.csv"
Set "ScrV=C:\bla\xlsToCSV.vbs"
Set "SrcD=C:\bla\bla"
Set "Str1=aaa"
Set "Str2=bbb"
Set "Str3=ccc"

CD /D "%SrcD%" 2>Nul || Exit /B
For %%A In ("?* %Str1% ?*%Ext1%","?* %Str2% ?*%Ext1%","?* %Str3% ?*%Ext1%") Do (
    For /F "Tokens=2" %%B In ("%%~nA") Do (Echo Found %%B
        CScript //B //NoLogo "%ScrV%" "%%A" "%%B%Ext2%"))

Вы должны изменить только строки 4 - 8, вставив соответствующие пути и строки. (Пожалуйста, не добавляйте и не удаляйте двойные кавычки, " и не включайте обратную косую черту, \ в пути к исходному каталогу в строке 5.)

Это только Решение проблемы пакетного сценария, VBScript Excel или файловой системы потребует нового вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...