Maandelijks bestandsnamen in een bat.file wijzigen

Status
Niet open voor verdere reacties.

athestreet

Gebruiker
Lid geworden
13 nov 2006
Berichten
77
Hallo,

Ik heb een vraag over het maandelijks wijzigen van bestandsnamen in een bat.file

Ik gebruik sfk166 (swiss knife) om uit een twintig.tal *xml bestanden een bepaalde aantal posities uit te lezen met partcopy.
Dit gaat op zich goed.
Ik heb 3 mapjes gemaakt.
* IN\ map
* PROGRAM\ map ( waar de bat.file in staat om de sfk166 te activeren)
* UIT\ map resultaten. Daarna worden zij weer in excel ingelezen met deze data.

In de bat.file staat de regel:
..\program\sfk166.exe partcopy ..\IN\KAS_02_TOTALS_20140519_V76.xml 320 145 ..\OUTPUT\KAS_02_TOTALS_20140519_V76_summarydata.txt -yes.
..\program\sfk166.exe partcopy ..\IN\KAS_15_TOTALS_20140519_V22.xml 320 145 ..\OUTPUT\KAS_15_TOTALS_20140519_V22_summarydata.txt -yes.

en dan 30 stuks waar in de naam KAS_02_TOTALS_20140519_V76.xml de cijfers anders kunnen zijn. Na KAS_cc kan er meerdere van zijn. Verschil is te vinden in _Vcc.xml

Verzoek is nu iets te maken dat wanneer de nieuwe 30 stuks files in de \IN map worden geplaatst, dan dit wordt uitgelezen en de *.bat.file in \PROGRAM automatisch wordt aangepast of via een opstart script de juiste namen worden geplaatst met de nodige commando's
..\program\sfk166.exe partcopy ..\IN\ ************ 320 145 ..\OUTPUT\************_summarydata.txt -yes.
 
Persoonlijk zou ik dan overstappen op VBS in plaats van batch files of mogelijk powershell. Met een regex is het verkrijgen van het **** deel redelijk eenvoudig
 
Idee is wel interessant alleen ken ik geen een van deze twee. Zou je mij hierbij kunnen helpen. Moet je daar ook extra software voor installeren? Dit mag helaas niet bij ons.
:thumb:
 
Laatst bewerkt:
Nee, tenminste, afhankelijk van je besturingssysteem natuurlijk. powershell zit in windows 7 (mogelijk zelfs vista, ben ik niet zo bekend mee) en VBS is in principe ondersteund vanuit .NET

maak een filetje genaamd test.vbs en gooi er dit in:

Code:
Wscript.Echo "Hello, World"

dan weet je het snel genoeg ;)
 
Hallo Wampier,

Dit lukt. Powershell lukt niet. Scripts hiervan zijn afgesloten. Ik heb reeds enkele testjes hiervoor gedaan.
Dus vbs zou kunnen. VBS is dat visual basic? Ik moest het via een collega hierop zetten, maar ik dacht dat dit voor *.bat file was.
 
Laatst bewerkt:
visual basic script.

Code:
set fso = CreateObject("Scripting.FileSystemObject")

set folder = fso.GetFolder("..\in")
set files = folder.Files

for each dirfile in files
	Wscript.echo dirfile.Name
next

Dat is in principe de basis om door alle files in de "IN" directory te lopen en om de naam ook aan te passen natuurlijk
 
Dit werkt.
Ik krijg een tig keer een msgbox met de naam van het bestand te zien.
Ziet er al zeer goed uit.
Het vervolg is dat alle benamingen nu in een bat.file komen met bovenstaande commando's. Of kan vbs ook gelijk al een stuk uit xml eruit halen vanaf positie 320 en daarna 145 posities er vanaf. Met sfk.exe gaat dat supersnel. Leest gewoon gelijk dat stukje en haalt het eruit.
 
Wat dat bat bestand betreft in je initiële vraag kun je boven in het bestand een variabele zetten waar de gewenste datum in staat. Dat hoef je dan maar 1x aan te passen. In de verdere opdrachten gebruik je dan de variabele.
 
Het antwoord is tweeledig: ja vbscript kan in principe omgaan met XML. Echter is het omschrijven naar zo'n oplossing een beetje buiten de scope om van de vraag.

Eerst even een backup maken voordat je dit gaat testen, maar het is waarschijnlijk zoiets:

Code:
set fso = CreateObject("Scripting.FileSystemObject")

set folder = fso.GetFolder("..\in")
set files = folder.Files
Set objShell = WScript.CreateObject("WScript.Shell")

for each dirfile in files
	'Wscript.echo dirfile.Name
        objShell.Run "sfk166.exe partcopy ..\IN\" & dirfile.Name & " 320 145 ..\output\" & fso.GetBaseName(dirfile) & "_summarydata.txt -yes"
next
 
Hallo Wampier het werkt echt perfekt. Ongelooflijk hoe snel je zo iets kunt maken. Ik ben echt een heel stuk verder gekomen. Dit scheelt zoveel tijd. Bedankt daarvoor.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan