deadmanwalkin
Goto Top

Dateien kopieren und Zielfolder per Userinput angeben

Hallo,

Ich arbeite im Bereich der Softwarevalidierung bei einem Unternehmen in der Pharma/Forschungsindustrie. Meine Arbeit besteht dadrin, Software gegen eine Spezifikation zu testen.

Im Zuge dieses Testens haben wir eine kleine .bat datei geschrieben, mit dem wir aus unseren SystemDaten die Datenbankrelevanten Dateien speichern, damit wir sie ggf. zu einem späteren Zeitpunkt wieder laden können.
Diese kleine .bat datei sieht wie folgt aus:
xcopy C:\LAB4\DB\ML*.* C:\DBbackup\backup\ML*.*


Somit landen alle Dateien die mit "ML" anfangen im Ordner "C:\DBbackup\backup".
Simpel, einfach, funktioniert.

da wir aber nicht nur eine DB speichern sondern pro Softwarevalidierung ~200, muss natürlich jede Datenbank umbenannt und in div. Unterorndner verschoben werden. Man will natürlich versuchen, Zeit zu sparen, daher dachte ich, man könnte das ganze ja etwas automatisieren.
Ich habe mich nun etwas eingelesen und bin aktuell bei diesem Code angelangt:
@echo OFF
ECHO.
ECHO Bitte den namen der Datenbank eingeben.
ECHO Format: "NAME" - Enter - F6 - Enter
ECHO (Die Anführungstriche sind Pflicht wenn der Name Leerzeichen enthält!)
ECHO.

FOR /F "tokens=*" %%A IN ('TYPE CON') DO SET FOLD=%%A
xcopy C:\LAB4\DB\ML*.* .\%FOLD%\ML*.*

es geht ein CMD Fenster auf, dort gibt man den Datenbanknamen ein und danach werden die Files in dem Ordner gespeichert den man angegeben hat (Als Unterordner in dem Ordner in dem die .bat Datei liegt). Hierbei gibt es nun ein paar Probleme, bei denen ich nicht weiterkomme:

a) will man Leerzeichen in dem Ordnernamen haben, muss man Anführungsstriche verwenden
b) man muss Enter -> F6/Strg+Z -> Enter drücken, damit die Datenbank wirklich gespeichert wird (aka die Dateien kopiert werden).
Beides erkenntlich aus den Kommentaren die ich reingeschrieben habe. face-smile

Gibt es nun innerhalb der Batchprogrammierung eine Möglichkeit, das Ganze etwas "geschickter" zu lösen? Eventuell dass man nur noch einmal Enter drücken muss oder wenigstens das F6 wegfällt? oder dass man keine Anführungsstriche mehr braucht, selbst wenn Leerzeichen vorhanden sind? .vbs dateien sind auf dem Rechner nicht ausführbar (scripting host disabled), daher bleibt nicht viel übrig, man muss also auf Batch zurückgreifen.

Ich würde mich freuen, wenn jemand eine (Teil-) Lösung hätte - oder mir im worst case zumindest bestätigen kann, dass ohne VBS der obige Code das Höchste der Gefühle ist.
Vielen Dank,
dmw

Content-Key: 144887

Url: https://administrator.de/contentid/144887

Printed on: April 19, 2024 at 22:04 o'clock

Member: Biber
Biber Jun 15, 2010 at 13:31:21 (UTC)
Goto Top
Moin, deadmenwalkin,

willkommen im Forum und im 3.Jahrtausend.

Die Batchprogrammierung hat sich schon in den letzten Jahrzehnten etwas weiterentwickelt.

Diese Krücke mit Aufruf von "Type con" ist ein Relikt aus der Zeit vor Erfindung der Alufolie...
...als die FDP noch mit dem Versprechen eines niedrigen, einfachen und gerechten Steuersystems erfolgreich Bauernfängerei betrieben hat.
Ewig her und heute heute kein Partykracher mehr.

Statt dessen gibt es heutzutage den Befehl "SET /P", den du bei Eingabe von "SET /?" am CMD-Prompt beschrieben findest..

Schau es dir bitte erst kurz selbst an - wenn du damit nicht weiterkommst --> wir sind hier.

Grüße
Biber
[Edit] Bei Werder Bremen hatten wir auch mal einen Kugelblitz namens Ailton... face-wink [/Edit]
Member: bastla
bastla Jun 15, 2010 at 13:34:07 (UTC)
Goto Top
Hallo deadmanwalkin und willkommen im Forum!

Eine Eingabe lässt sich in Batch so durchführen und kann einfach mit Enter abeschlossen werden.
set /p FOLD=Bitte den namen der Datenbank eingeben: 
Anführungszeichen kannst Du ja bei der Verwendung der Variablen %FOLD% setzen:
xcopy C:\LAB4\DB\ML*.* "%FOLD%\"
Um das Ganze schließlich in einer (Endlos-)Schleife laufen zu lassen, einfach ein "goto" verwenden:
@echo off & setlocal
:Loop
set "FOLD="  
set /p FOLD=Bitte den namen der Datenbank eingeben: 
if defined FOLD xcopy C:\LAB4\DB\ML*.* "%FOLD%\"  
echo.
echo.
goto :Loop
Grüße
bastla

[Edit]
@Biber
wir sind hier.
Sorry - war schon da ... face-wink
[/Edit]
Member: deadmanwalkin
deadmanwalkin Jun 15, 2010 at 14:12:00 (UTC)
Goto Top
Hi ihr beiden,

das war genau das was ich gesucht habe. "Set /P" hab ich beim googlen auch schonmal entdeckt gehabt, aber irgendwie bin ich nicht so ganz dahinter gestiegen. Mag auch daran liegen, dass ich nicht meine ganze Arbeitszeit zum verstehen von so einer Funktion aufwenden kann :P

Wie auch immer, es funktioniert einwandfrei. habs noch etwas für meine Bedürfnisse angepasst:

@echo off & setlocal
:loop
Dir /b /ad
echo.
echo.
set "FOLD="  
set /p FOLD=Bitte den namen der Datenbank eingeben: 
if defined FOLD xcopy C:\LAB4\DB\ML*.* "%FOLD%\"  
cls
goto loop

Vielen Dank nochmal face-smile
Grüße,
dmw