muhkuh007
Goto Top

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

Content-Key: 57980

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

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: bastla
bastla 01.05.2007 um 21:40:39 Uhr
Goto Top
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:
@echo off
set /p "Neu=Neuer Name? "  
copy %1 "%~dp1%Neu%%~x1"  
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]
Mitglied: Biber
Biber 02.05.2007 um 07:47:15 Uhr
Goto Top
Moin muhkuh007,

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
Mitglied: muhkuh007
muhkuh007 02.05.2007 um 09:36:19 Uhr
Goto Top
Danke vielmals für die herzliche begrüßung im forum und die schnellen antworten.

grundsätzlich geht das schon so, mein problem ist aber folgendes:

ich kann dem nutzer der kopier und benamsel-funktion nicht dazu anhalten, zum speicherort der originaldatei (das ist IMMER die selbe datei, die immer am gleichen ort liegt - also nur eine einzige datei. da müsste man ja statt der variablendefinition einfach den speicherort angeben können? )zu gelangen, die liegt auf einem server, der user soll von seinem desktop mit diesem skript zugriff auf die originaldatei haben, diese kopieren, einen neuen namen eingeben und öffnen soll es nach möglichkeit die datei auch gleich....

bitte um entschuldigung für die etwas wage ausformulierung im ersten post....
Mitglied: Biber
Biber 02.05.2007 um 09:48:25 Uhr
Goto Top
Moin muhkuh007,

bitte um entschuldigung für die etwas wage ausformulierung im ersten post....
Gewährt. *gg
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
Mitglied: muhkuh007
muhkuh007 02.05.2007 um 09:56:58 Uhr
Goto Top
hallihallo.

der ordner findet sich auf einem netzlaufwerk, für alle user x:\files\bap\bap_orig.mdb (wieso ich mdb files kopieren will? ein relativ komplexes datenbankprogramm....das eben öfter neu angelegt werden muss)

es gibt also eine fixe originaldatenbank, die leer ist, und der user soll den neuen datensatz in eine neue datenbank reinschreiben....

eben desshalb soll er nach möglichkeit vom desktop aus die datei im obigen verzeichnis kopieren, neu benennnen und dann gleich damit arbeiten.....

grüße und besten dank, muhkuh007
Mitglied: bastla
bastla 02.05.2007 um 10:04:23 Uhr
Goto Top
@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
Mitglied: Biber
Biber 02.05.2007 um 10:45:01 Uhr
Goto Top
@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
Mitglied: muhkuh007
muhkuh007 02.05.2007 um 13:39:57 Uhr
Goto Top
ich hab mich da jetzt selber ein bisserl gespielt und folgendes zustande gebracht:

@echo off
set programm="C:\WINDOWS\notepad.exe"
set /p "Neu=Bitte gib den Namen der Datei ein!"

copy "C:\test.txt" "C:\%~dp1%Neu%.txt"

start %programm% "C:\%~dp1%Neu%.txt"

if ERRORLEVEL 1 (echo Fehler) else (echo OK)


gibts dazu verbesserungsvorschläge, weil grundätzlich funktioniert das wunderbar so.... aber ich bin nicht der experte!

grüße muhkuh007
Mitglied: bastla
bastla 02.05.2007 um 18:17:10 Uhr
Goto Top
Hallo muhkuh007!

Bis der Experte vorbeikommt, kurze Anmerkungen von mir face-wink:
  • 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.
Analog zu oben könnte das Ganze dann etwa so aussehen:
@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
Der Aufruf (zB in der Verknüpfung) könnte dann mit
Kopiere.bat "C:\test.txt"  
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 ...