Datei kopieren mit Aufforderung zur Namensvergabe
Hallo
bin Programmiersprachentechnisch eine Null (nur Turbopascal...) also bitte nach möglichkeit eine idioteneinfache beantwortung folgender frage:
ich benötige ein skript welches mir eine bereits vorhandene datei kopiert und mich auffordert, einen neuen dateinamen zu vergeben. die dateiendung soll gleichbleiben, auch der ordner der quell und zieldatei ist identisch. das alles soll nur nach ausführen passieren (also keine automatik) und möglich benutzerfreundlich
bin für jede anregung dankbar,
beste grüße,
muhkuh007
bin Programmiersprachentechnisch eine Null (nur Turbopascal...) also bitte nach möglichkeit eine idioteneinfache beantwortung folgender frage:
ich benötige ein skript welches mir eine bereits vorhandene datei kopiert und mich auffordert, einen neuen dateinamen zu vergeben. die dateiendung soll gleichbleiben, auch der ordner der quell und zieldatei ist identisch. das alles soll nur nach ausführen passieren (also keine automatik) und möglich benutzerfreundlich
bin für jede anregung dankbar,
beste grüße,
muhkuh007
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 57980
Url: https://administrator.de/forum/datei-kopieren-mit-aufforderung-zur-namensvergabe-57980.html
Ausgedruckt am: 23.04.2025 um 01:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo muhkuh007 und willkommen im Forum!
Wenn ich einmal davon ausgehe, dass Du Windows verwendest, solltest Du mit der folgenden Batchdatei Deine Anforderung umsetzen können:
Zur Verwendung: Zunächst die 3 Codezeilen mit einem Texteditor als "Kopiere.bat" speichern (Achtung beim Windows-eigenen Editor: dort musst Du zum Speichern als ".bat" zunächst den Dateityp auf "Alle Dateien" ändern und dann den Namen unter Anführungszeichen eingeben, sonst wird ein ".txt" angefügt).
Am einfachsten ist es, die Batchdatei auf dem Desktop abzulegen und die zu kopierende Datei auf die Batchdatei zu ziehen oder die Batchdatei im Ordner "Send To" des Benutzerprofiles (normalerweise "C:\Dokumente und Einstellungen\Benutzername\Send To") zu speichern und über das Kontextmenü mit "Senden an ..." aufzurufen.
Grüße
bastla
[Edit] Speicherhinweise hinzugefügt [/Edit]
Wenn ich einmal davon ausgehe, dass Du Windows verwendest, solltest Du mit der folgenden Batchdatei Deine Anforderung umsetzen können:
@echo off
set /p "Neu=Neuer Name? "
copy %1 "%~dp1%Neu%%~x1"
Am einfachsten ist es, die Batchdatei auf dem Desktop abzulegen und die zu kopierende Datei auf die Batchdatei zu ziehen oder die Batchdatei im Ordner "Send To" des Benutzerprofiles (normalerweise "C:\Dokumente und Einstellungen\Benutzername\Send To") zu speichern und über das Kontextmenü mit "Senden an ..." aufzurufen.
Grüße
bastla
[Edit] Speicherhinweise hinzugefügt [/Edit]
Moin muhkuh007,
willkommen auch von mir.
Nur als marginaler Verbesserungsvorschlag zu bastlas Lösung:
Ergibt dann so etwas als Benutzerrückfrage:
Gruss
Biber
willkommen auch von mir.
Nur als marginaler Verbesserungsvorschlag zu bastlas Lösung:
::---------snipp CopyWPrompt.bat
@echo off
set /p "Neu=Neuer Name für %~n1[%~x1]? "
copy "%1" "%~dp1%Neu%%~x1"
::---------snapp CopyWPrompt.bat
Ergibt dann so etwas als Benutzerrückfrage:
>CopyWPrompt.bat test.txt
Neuer Name für test[.txt]? test3008
-----------> copy "test.txt" "E:\test3008.txt"
Gruss
Biber
Moin muhkuh007,
Aber wenn Du schon dabei bist, das Ganze zu konkretisieren:
- ist der (oder die???) Unterordner denn fest [als UNC-Pfad] vorgegeben?
Oder als Netzlaufwerk gemappt bei allen Usern unter dem gleichen Laufwerksbuchstaben?
Werdee alle Dateien zum Kopieren angeboten oder nur die mit einer bestimmten Endung oder welcher anderen Eigenschaft?
Wie kommt der User auf die eine bestimmte Datei, die er kopieren soll/muss/darf?
Gruss
Biber
bitte um entschuldigung für die etwas wage ausformulierung im ersten post....
Gewährt. *ggAber wenn Du schon dabei bist, das Ganze zu konkretisieren:
- ist der (oder die???) Unterordner denn fest [als UNC-Pfad] vorgegeben?
Oder als Netzlaufwerk gemappt bei allen Usern unter dem gleichen Laufwerksbuchstaben?
Werdee alle Dateien zum Kopieren angeboten oder nur die mit einer bestimmten Endung oder welcher anderen Eigenschaft?
Wie kommt der User auf die eine bestimmte Datei, die er kopieren soll/muss/darf?
Gruss
Biber
@Biber
Ich neige ja dazu, eher zu viele als zu wenige Anführungszeichen zu setzen, aber bei %1 sollte es doch auch ohne gehen (bzw würde ich dann "%~1" verwenden), oder übersehe ich etwas?
Grüße
bastla
Ich neige ja dazu, eher zu viele als zu wenige Anführungszeichen zu setzen, aber bei %1 sollte es doch auch ohne gehen (bzw würde ich dann "%~1" verwenden), oder übersehe ich etwas?
Grüße
bastla
@bastla
Jepp, hast Recht mit "würde ich dann "%~1" verwenden".
Muss ich mir mal abgewöhnen, diese beiläufige Änderung "nebenbei" zu machen...
Gruß
Biber
Jepp, hast Recht mit "würde ich dann "%~1" verwenden".
Muss ich mir mal abgewöhnen, diese beiläufige Änderung "nebenbei" zu machen...
Gruß
Biber
Hallo muhkuh007!
Bis der Experte vorbeikommt, kurze Anmerkungen von mir
:
Der Aufruf (zB in der Verknüpfung) könnte dann mit
erfolgen.
Vorweg zu den Anführungszeichen (beim Aufruf, im Batch für %1 oder den Programmnamen): Da in Deinen als Beispiel gewählten Dateinamen/Pfaden keine Leerzeichen enthalten sind, könntest Du darauf verzichten, die angeführten Dateien/Pfade unter Anführungszeichen zu setzen. Da sie andererseits auch (meistens - Achtung etwa bei der "start"-Anweisung, siehe Hilfe) nicht schaden, habe ich mir angewöhnt, sie dennoch zu verwenden. Für das Argument %1 schreibe ich dann "%~1", wodurch zunächst die Anführungszeichen entfernt und dann auf jeden Fall wieder gesetzt werden - so erreiche ich einen definierten Zustand des übergebenen Arguments %1. Ohnehin Pflicht sind sie für den neuen Namen, da vom Benutzer eingegebene Leerzeichen in die Variable %Neu% übernommen werden.
Das neu hinzugefügte "setlocal" ist besonders beim Testen nützlich, weil dadurch die von Dir gesetzten Variablen "lokal" werden (also beim nächsten Testlauf zunächst nicht vorhanden sind).
Mit der Zeile set Neu=%Neu:\=% werden aus dem neu eingegebenen Namen alle ev enthaltenen "\" entfernt - mit der gleichen Technik könntest Du auch andere unwillkommene Zeichen eliminieren (wobei sich dann vielleicht vor dem Kopieren eine Anzeige des "gesäuberten" Dateinamens und Rückfrage, ob dieser verwendet werden soll, anbieten würde).
Die Umleitungen ">nul" und "2>nul" sorgen dafür, dass die Meldungen des "copy"-Befehles (bei Erfolg bzw bei Fehler) nicht ausgegeben werden.
Die Schreibweise "&&" entspricht einem "if errorlevel 0" - die folgende Anweisung wird also nur ausgeführt, wenn die vorherige Anweisung ohne Fehler beendet wurde.
Das "goto :eof" entspricht dem Ende eines (Unter-)Programms.
Grüße
bastla
P.S.: Gelegentlich schreibe ich längere Kommentare, und besonders, aber nicht ausschließlich, dann versuche ich, durch die gelegentliche Verwendung von Großbuchstaben die Lesbarkeit zu verbessern ...
Bis der Experte vorbeikommt, kurze Anmerkungen von mir
- Auch wenn es anscheinend keine Konvention für die Vergabe des neuen Namens gibt, würde ich die Eingabe trotzdem darauf prüfen, ob sie unerwünschte Zeichen enthält oder "leer" ist und ansonsten den Erfolg des "copy" untersuchen (nicht erst nach dem Starten der Anwendung prüfen).
- (Wenn dem Dateityp eine Standardanwendung zugeordnet ist, kannst Du das "Programm" auch weglassen und die Datendatei selbst "starten" - entspricht einem Doppelklick im Explorer.)
- Da Du mit %1 weiterhin die Übergabe eines Argumentes voraussetzt, wäre eigentlich der gesamte "copy"-Befehl variabel.
@echo off & setlocal
set "programm=C:\WINDOWS\notepad.exe"
set /p "Neu=Bitte gib den Namen der Datei ein!"
set "Neu=%Neu:\=%"
if "%Neu%" neq "" copy "%~1" >nul 2>nul "%~dp1%Neu%%~x1" && start "Fenstername" "%programm%" "%~dp1%Neu%%~x1" & goto :eof
echo Fehler
pause
Kopiere.bat "C:\test.txt"
Vorweg zu den Anführungszeichen (beim Aufruf, im Batch für %1 oder den Programmnamen): Da in Deinen als Beispiel gewählten Dateinamen/Pfaden keine Leerzeichen enthalten sind, könntest Du darauf verzichten, die angeführten Dateien/Pfade unter Anführungszeichen zu setzen. Da sie andererseits auch (meistens - Achtung etwa bei der "start"-Anweisung, siehe Hilfe) nicht schaden, habe ich mir angewöhnt, sie dennoch zu verwenden. Für das Argument %1 schreibe ich dann "%~1", wodurch zunächst die Anführungszeichen entfernt und dann auf jeden Fall wieder gesetzt werden - so erreiche ich einen definierten Zustand des übergebenen Arguments %1. Ohnehin Pflicht sind sie für den neuen Namen, da vom Benutzer eingegebene Leerzeichen in die Variable %Neu% übernommen werden.
Das neu hinzugefügte "setlocal" ist besonders beim Testen nützlich, weil dadurch die von Dir gesetzten Variablen "lokal" werden (also beim nächsten Testlauf zunächst nicht vorhanden sind).
Mit der Zeile set Neu=%Neu:\=% werden aus dem neu eingegebenen Namen alle ev enthaltenen "\" entfernt - mit der gleichen Technik könntest Du auch andere unwillkommene Zeichen eliminieren (wobei sich dann vielleicht vor dem Kopieren eine Anzeige des "gesäuberten" Dateinamens und Rückfrage, ob dieser verwendet werden soll, anbieten würde).
Die Umleitungen ">nul" und "2>nul" sorgen dafür, dass die Meldungen des "copy"-Befehles (bei Erfolg bzw bei Fehler) nicht ausgegeben werden.
Die Schreibweise "&&" entspricht einem "if errorlevel 0" - die folgende Anweisung wird also nur ausgeführt, wenn die vorherige Anweisung ohne Fehler beendet wurde.
Das "goto :eof" entspricht dem Ende eines (Unter-)Programms.
Grüße
bastla
P.S.: Gelegentlich schreibe ich längere Kommentare, und besonders, aber nicht ausschließlich, dann versuche ich, durch die gelegentliche Verwendung von Großbuchstaben die Lesbarkeit zu verbessern ...