windows - Hvordan kan jeg inkludere et vbscript-trin i en batchfil?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad jeg forsøger at gøre:
Jeg har 3 xls filer, jeg får ved e-mail, opkaldt som sådan (dato stempel ændrer hver gang):


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


Jeg vil gerne:



  • konverter dem til csv

  • navngive dem så: aaa.csv, bbb.csv, ccc.csv



Her er mit script, så langt, det fejler:


@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!"
)


Når jeg kører dette, får jeg en Windows Script Host fejlmeddelelse, der siger:


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


Jeg kan bekræfte, at filerne/mappen ikke er læst, jeg kan bekræfte, at der ikke er specielle tegn i stien/filnavnet, og stien er heller ikke længere end 218 tegn.


Jeg kan også bekræfte, at Excel-filerne ikke er korrupte eller dårlige på nogen måde.


Jeg kan også sige, at mens jeg ser fejlmeddelelsen, hvis jeg forsøger at åbne nogen af ​​de 3 filer i Excel (ikke kun den, jeg får fejlen til), kaster Excel den nøjagtig samme fejl som ovenfor.


Hvis jeg kører dette script, fungerer det bare fint:


setlocal enableextensions enabledelayedexpansion

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


men denne version af scriptet ændrer ikke mine filer til de ønskede filnavne, ændrer bare udvidelsen.


Her er 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

Bedste reference


I betragtning af den angivne filnavnestruktur skal følgende script udføre den nødvendige opgave:


@Echo Off
Set "Ext1=.xls"
Set "Ext2=.csv"
Set "ScrV=C:laxlsToCSV.vbs"
Set "SrcD=C:lala"
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\%"))


Du bør kun ændre linjerne 4 - 8 ved at indsætte de relevante stier og strenge. (Du må ikke tilføje eller fjerne dobbeltkvoter, " og ikke inkludere en tilbageslagsspor, på din kildekatalogsti på linjen 5.)
< br> Dette er kun en batch script løsning, VBScript Excel eller filsystem problemer vil kræve et nyt spørgsmål.