flo985
Goto Top

Per Batch nach Datei in Ordner suchen, dann umbenennen, dann kopieren

Hi, ich möchte gerne folgendes ralisieren:
Ich möchte in eine Verzeichnis mit Unterordnern nach einer Datei suchen.
Sprich es müsste erstmal die abfrage nach der Datei kommen. Dann müsste er die Datei umbenennen, also nur die Dateiendung. Und dann soll diese noch kopiert werden.
Mein bisheriges Script:
@echo off 
:eingabe 
echo ======================================================
echo Geben sie den Dateinamen der zu kopierenden Datei ein: 
echo ====================================================== 
cd C:\Pfad\
ren *.txt *.ori
set /p data=
xcopy C:\Pfad\%data% \\Server\Pfad\ /H
echo ====================================================== 
echo Wollen Sie noch eine Datei kopieren? (j/n) 
echo ====================================================== 
set /p ant= 
if "%ant%"=="j" GOTO eingabe   
cls 
echo ======================================================
echo Ihre gewuenschten Daten wurden kopiert.
echo ======================================================
echo Schoenen Tag noch :-)
echo ======================================================
pause
Durch ren *.txt *.ori kann ich die Textdateien ja in .ori umwandeln. Allerdings wandelt er mir alle Dateien in dem Ordner um, er soll aber nur die Datei umwandeln, nach der ich suchen möchte. Das er nach der Datei fragt, die kopiert werden soll, das klappt schon, jetzt muss nur noch die Suchfunktion mit hinein.
Ich hoffe ihr könnt mir helfen!!

Content-ID: 105603

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

Printed on: November 3, 2024 at 02:11 o'clock

Hannes-Schurig
Hannes-Schurig Jan 09, 2009 at 14:16:48 (UTC)
Goto Top
Selbstverständlich benennt er alle um.

Du gibst erst den Pfad ein, dann gehst du in diesen Pfad bei

cd C:\Pfad\

Wenn du also als Pfad "Archiv\August\Test\" eingibst dann wechselt dein Script in den Ordner C:\Archiv\August\Test\

Als nächstes führt es den Befehl "ren *.txt *.ori" aus, also ALLE Dateien mit der Endung .txt (daher das * davor) werden in .ori umbenannt. Hast du jetzt 10 Dateien im Ordner 'Test', die mit .txt enden, dann werden auch alle 10 umbenannt!

Selbst wenn du als Pfad "Archiv\August\Test\test.txt" eingibst, so bleibt doch der Befehl "ren *.txt *.ori" der selbe, da du dort keine Variable drin hast. Daher werden immer alle Dateien umbenannt.

Ändere das Script z.B. in:

Geben Sie den Pfad ein: %pfad%
Geben Sie die Datei ein: %datei%
cd /D %pfad%
ren %datei% %datei%.ori

Das ist natürlich nur ein Konzept und wird so nicht in einer Batch funktionieren ;)
Aber es sieht ja so aus als könntest du genug Batch um das umzusetzen face-smile
Flo985
Flo985 Jan 10, 2009 at 10:12:36 (UTC)
Goto Top
Hi, erstmal Danke für deine Antowrt.
Ich weiß wie ddu das meinst mit den Pfads, da muss ich mal gucken, ob ich das so hinbekomme wie ich mir das vorstelle.
Die Batch habe ich mir mit Hilfe des Forums und anderen Leuten zusammen geschustert, also ich bin so bewander mit Batch-Programmierung.
Ich werde sowie ich Montag an der Arbeit bin nochmal ein wenig rumspielen und mal gucken ob ich es hinbekomme.
Werde dann Montag nochmal schreiben. Würde mich freuen, wenn du den Thread im Auge behälst und mir Montag dann evtl. nochmal helfen kannst.
Danke schon mal.
Hannes-Schurig
Hannes-Schurig Jan 11, 2009 at 11:40:16 (UTC)
Goto Top
Wird im Auge behalten, das kriegen wir gelöst.
Bis Montag
Flo985
Flo985 Jan 12, 2009 at 05:56:05 (UTC)
Goto Top
Moin, also bisher habe ich es so:

@echo off
:eingabe
echo ======================================================
echo Geben sie den Dateipfad ein:
echo ======================================================
cd C:\SolidCam_NC\%pfad%
set /p pfad=
echo ======================================================
echo Geben sie den Dateinamen der zu kopierenden Datei ein:
echo ======================================================
ren %data% %data%.ori
set /p data=
xcopy C:\SolidCam_NC\%data% \\wmz-svr01\rwtsoft\SOLIDCAM-NC\ /H
echo ======================================================
echo Wollen Sie noch eine Datei kopieren? (j/n)
echo ======================================================
set /p ant=
if "%ant%"=="j" GOTO eingabe
cls
echo ======================================================
echo Ihre gewuenschten Daten wurden kopiert.
echo ======================================================
echo Schoenen Tag noch face-smile
echo ======================================================
pause

Das Ding ist: Bei geben Sie den Dateipfad ein, muss ich es so hinkriegen, das wenn ich nichts eingebe in dem Ordner C:\SolidCam_NC bin. Nur wenn ich dort in einen Unterordner will, muss ich was eingeben.
Des Weiteren soll er mir die Datei, die ich kopiere von .txt in .ori umwandeln.
Dies muss er ja machen, wenn die Datei schon kopiert wurde oder?
cybersnake
cybersnake Jan 12, 2009 at 08:49:04 (UTC)
Goto Top
Hey, ich mal wieder

also das mit dem pfad ist soweit ich das sehe gelöst. wenn du bei der abfrage enter drückst bist du im pfad C:\SolidCam_NC, ansonsten wenn eingabe macht im unterordner.
ich hoffe das ist so wie du dir das vorgestellt hast. hab noch paar kleinigkeiten geändert und lass den aktiven pfad noch mal anzeigen bei der dateieingabe. kannst ja wieder rauslöschen wenn nicht gefällt.

@echo off
:eingabe
echo ======================================================
echo Geben sie den Dateipfad ein:
echo ======================================================
cd C:\SolidCam_NC\
set /p pfad=
if "%pfad%"=="" GOTO wechsel else GOTO name  
:wechsel
cd C:\SolidCam_NC\%pfad%
:name
echo ======================================================
echo Geben sie den Dateinamen der zu kopierenden Datei ein:
echo ======================================================
echo Ihr aktueller Dateipfad ist %CD%
set /p data=
ren %data% %data%.ori
xcopy C:\SolidCam_NC\%data% \\wmz-svr01\rwtsoft\SOLIDCAM-NC\ /H
echo ======================================================
echo Wollen Sie noch eine Datei kopieren? (j/n)
echo ======================================================
set /p ant=
if "%ant%"=="j" GOTO eingabe  
cls
echo ======================================================
echo Ihre gewuenschten Daten wurden kopiert.
echo ======================================================
echo Schoenen Tag noch face-smile
echo ======================================================
pause

gruß
CyberSnake
cybersnake
cybersnake Jan 12, 2009 at 08:51:05 (UTC)
Goto Top
überings

ren %data% %data%.ori
set /p data=

du must erst die variable festlegen, sonst weiß er nicht was er umbenennen soll. war also bischen zeilenverdreht face-smile
in dem quell text von mir ist es schon geändert
Hannes-Schurig
Hannes-Schurig Jan 12, 2009 at 09:10:56 (UTC)
Goto Top
Hier wär meine Version.
Funktioniert, ich hoffe so wolltest du es haben.

@echo off
REM gehe in das Standardverzeichnis
cd /d C:\SolidCam_NC\

REM Frage nach evtl Unterverzeichnis
:requestfolder
echo ======================================================
echo Geben sie das Unterverzeichnis ein:
echo ======================================================

REM speichere Eingabe in %folder%
set /p folder=

REM gibt es den Unterordner unter C:\Solidcam_NC\ ?
if exist %folder% goto changefolder

REM retry wenn nicht
echo Pfad wurde nicht gefunden! Bitte erneut eingeben
echo.
echo.
goto requestfolder

REM Ordnerwechsel in eigenem Call wegen requestfilewiederholungsproblem
:changefolder
cd %folder%
goto requestfile

REM ansonsten weiter
:requestfile
echo.
echo ======================================================
echo Geben sie den Dateinamen der zu kopierenden Datei ein:
echo ======================================================
set /p file=

REM gibt es unter C:\Solidcam_NC\%folder% die Datei %file% ?
if exist %file% goto copy

REM retry wenn nicht
echo Datei %file% unter C:\Solidcam_NC\%folder% nicht gefunden.
echo Bitte erneut eingeben.
echo.
goto :requestfile

:copy
ren %file% %file%.ori

xcopy %file%.ori C:/Solidcam_NC/test2/ /H

echo ======================================================
echo Wollen Sie noch eine Datei kopieren? (j/n)
echo ======================================================
set /p again=
if "%again%"=="j" goto requestfolder  
cls
echo ======================================================
echo Ihre gewuenschten Daten wurden kopiert.
echo ======================================================
echo Schoenen Tag noch face-smile
echo ======================================================
pause
exit

Die Ausgabe kann verfeinert werden, die Fehlerabfragen sollten verbesser werden und der "Unzulässige Parameter" sollte noch weg aber an sich geht alles, also nur noch Kleinkram zu tun.
Flo985
Flo985 Jan 12, 2009 at 09:26:36 (UTC)
Goto Top
@cybersnake
Also, bei deinem Script wechselt er in den Ordner, das funktioniert und er zeigt mir den Pfad richtig an und ich kann auch die Datei auswählen aus dem Unterordner. Allerdings kopiert er die Dateien nicht.
Und die Dateiendung, ist irgendwie noch nicht nicht richtig. Er hängt an die bestehende Datei einfach ein .ori dran.
Also wenn die Datei test.txt heißt, macht er ein test.txt.ori.
Muss bei dem xcopy, vielleicht noch das %pfad% irgendwie mit rein, damit er auch wirklich weiß, was er kopieren muss?

Trotzdem schon mal danke.
Flo985
Flo985 Jan 12, 2009 at 09:33:33 (UTC)
Goto Top
@hannes
Zunächst auch dir vielen Dank für deine Hilfe. Folgendes Problem. Ich kann in einen Unterordner wechseln.
Dann fragt er mich ja nach der zu kopierenden Datei, die wähle ich per tab aus und dann bekomme ich die Meldung: unzulässige Parameteranzahl

Und bei der Dateiumbenennung, macht er ebenfalls das .ori an die bestehende Datei.

EDIT: Das kopieren funktioniert jetzt. Habe den Pfad angepasst. Das läuft, danke.
Nur eine andere Frage: Wenn ich in dem Standardverzeichnis bleiben will, was muss ich dann bei der ersten Abfrage (Verzeichnisabfrage) eingeben?

Dateiumbenennung geht weiterhin nicht.
cybersnake
cybersnake Jan 12, 2009 at 09:48:02 (UTC)
Goto Top
ah ich seh mein fehler. du legst %data% fest und benennst sie dann um. danach soll er sie kopieren. aber dann ist %data% ja nen anderer wert und den findet er nicht mehr. und der fest pfad muss aus xcopy raus sonst gehts nich wenn du nen unterverzeichniss angibst

versuchs mal so

@echo off
:eingabe
echo ======================================================
echo Geben sie den Dateipfad ein:
echo ======================================================
cd C:\SolidCam_NC\
set /p pfad=
if "%pfad%"=="" GOTO wechsel else GOTO name  
:wechsel
cd C:\SolidCam_NC\%pfad%
:name
echo ======================================================
echo Geben sie den Dateinamen der zu kopierenden Datei ein:
echo ======================================================
echo Ihr aktueller Dateipfad ist %CD%
set /p data=
xcopy %data% \\wmz-svr01\rwtsoft\SOLIDCAM-NC\ /H 
ren %data% %data%.ori
echo ======================================================
echo Wollen Sie noch eine Datei kopieren? (j/n)
echo ======================================================
set /p ant=
if "%ant%"=="j" GOTO eingabe  
cls
echo ======================================================
echo Ihre gewuenschten Daten wurden kopiert.
echo ======================================================
echo Schoenen Tag noch face-smile
echo ======================================================
pause

soll die quell datei umbenannt werden oder die datei auf dem zielserver? ich hab jetzt die quelldatei umbenannt
(auch wenn das mit der endung noch nicht stimmt)
Hannes-Schurig
Hannes-Schurig Jan 12, 2009 at 09:49:18 (UTC)
Goto Top
Ja wenn du aus der Datei test.txt test.ori machen willst dann erfordert das sicher ne Maske, die die 3 letzten Buchstaben entfernt und ori einsetzt. Da solltest vielleicht mal Googln, ich hab das in Batch noch nicht gemacht und da wir hier auch gerade umziehen hab ich auch keine Zeit das zu suchen/testen.

Wenn du auch den Standardpfad ohne Unterordner nutzen willst musst du dort noch sinnvoll ein if "%folder%"=="" goto requestfile oder so einbauen und das mit der anderen Abfrage, die zu requestfile führt, in Einklang bringen.

Sry bin grad echt im Stress, hier gehts grad voll rund.

So far
Flo985
Flo985 Jan 12, 2009 at 09:58:11 (UTC)
Goto Top
@cybersnake
Hi, erstmal Danke. Ich sehe du hast verstanden wie ich es meine face-smile
Es funktioniert jetzt auch alles tadellos:
Nur bei dem umbenennen:
Also er kopiert die test.txt in das Verzeichnis auf dem Server und dort heißt es weiter test.txt.
Im Quellordner nennt er die Datei in test.txt.ori um.

Am liebsten wäre es mir, er nennt sie im Quellordner und Zielordner um. Aber wenn nicht auch nicht schlimm. Auf alle Fälle muss sie im Zielordner umbenannt sein. Und wie gesagt, wenn möglich sollte das .txt weg.
Meinst du das ist nicht irgendwie zu machen?
Könnte man vielleicht ein rename machen, das er die Dateiendung wegnimmt und dann ein zweites rename, das er die Dndung .ori setzen soll? Wäre das vielleicht möglich?
cybersnake
cybersnake Jan 12, 2009 at 10:02:17 (UTC)
Goto Top
also erstmal
17. xcopy %data% \\wmz-svr01\rwtsoft\SOLIDCAM-NC\ /H  
18.ren %data% %data%.ori 
mach daraus mal :
xcopy %data% \\wmz-svr01\rwtsoft\SOLIDCAM-NC\ /H  
ren \\wmz-svr01\rwtsoft\SOLIDCAM-NC\%data% %data%.ori 
ren %data% %data%.ori 
teste das mal. hab grad keine zeit das zu prüfen.

wegen der endung der datei überlegt ich noch
Flo985
Flo985 Jan 12, 2009 at 10:05:29 (UTC)
Goto Top
Hi, jetzt funktioniert es soweit, das er im Quell- und Zielordner das .ori an die Datei setzt.
Jetzt muss noch das .txt weg und schwupps sind wir fertig face-smile
cybersnake
cybersnake Jan 12, 2009 at 10:11:01 (UTC)
Goto Top
da fehlt mir noch die zündende idee. nach dem mittag meld ich mich falls mir was eingafallen ist
Flo985
Flo985 Jan 12, 2009 at 10:16:27 (UTC)
Goto Top
Alles klar, ich bin auch schon dauernd am googeln face-smile
Hoffe wir finden was. Trotzdem schon mal vielen Dank an euch beide.
cybersnake
cybersnake Jan 12, 2009 at 10:21:04 (UTC)
Goto Top
es ist einfacher als gedacht
ren \\wmz-svr01\rwtsoft\SOLIDCAM-NC\%data% *.ori
ren %data% *.ori 
versuch das mal
Flo985
Flo985 Jan 12, 2009 at 10:53:23 (UTC)
Goto Top
Genau das ist es!!!!!
Vielen Dank face-smile
GELÖST.
cybersnake
cybersnake Jan 12, 2009 at 11:20:41 (UTC)
Goto Top
bitte, gern geschehen

gruß
CyberSnake