Erstellen eines DOS-Batch-Skripts zum Umbenennen von Dateien

1429
khiloc

Ich arbeite derzeit an einem Problem mit einem DOS-Batch-Skript, an dem ich gerade gearbeitet habe, und brauche Hilfe beim Umbenennen der Dateien.

Hier ist das Umbenennungsschema, nach dem ich suche:

Ursprüngliche Dateinamen

FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD 

Ich muss den ursprünglichen Dateinamen letzten Teil ( DDMMYY) nehmen und in verwandeln YYMMDD.

Es sollte so gehen

FIL120_000112_301215 ==> MYNAME_TLD_EXT_151230 FIL120_000112_311215 ==> MYNAME_TLD_EXT_151230 FIL120_000112_040116 ==> MYNAME_TLD_EXT_151230 FIL120_000112_050116 ==> MYNAME_TLD_EXT_151230 

Bitte beachten Sie, dass die aktuelle Benennung nicht mit dem aktuellen Datum und einem Befehl in diesem Teil des Dateinamens ausgeführt werden muss.

Ich möchte wissen, ob es mit einer Batch - Skript möglich ist, die letzten Dateinamen Teil Zeichen Positionen zu schalten, um im Wesentlichen zu erhalten YYund DDwerden Plätze tauschen.

Außerdem brauche ich die anderen Teile vor dem Fixieren YYMMDD, um sie mit statischen Zeichen zu ersetzen, und MYNAME_TLD_EXT_nicht vor dem Schalter. Das Endergebnis ist also MYNAME_TLD_EXT_<YYMMDD>und hat keine Dateierweiterung.

3
Möchten Sie das Skript für MS-DOS 6 oder Windows cmd.exe? Wenn es Windows ist, muss es ein Batch-Skript sein? (Windows 7+ verfügt über leistungsfähigere Skriptsprachen wie PowerShell.) grawity vor 8 Jahren 0
Hellothanks für die Antwort. Ich brauche es, um auf Windows Server 2008 R2 zu laufen. In der Tat habe ich bereits ein Skript (kein Powershell, aber nur ein einfaches DOS-Skript), das für die Ausführung des Jobs ausgeführt wird, aber der Umbenennungsteil ist auf einen Codeausschnitt angewiesen, um das vorherige Datum zu finden und es an die Datei en anzuhängen. Dies führte mich jeden Montag zu einem Problem, bei dem die Datei umbenannt werden muss, nicht auf den Vortag (Sonntag), sondern auf den letzten Arbeitstag. Ein anderes Problem entsteht, wenn wir Ferien haben. khiloc vor 8 Jahren 0
Aus diesem Grund möchte ich die Art und Weise ändern, in der das Skript umbenannt wird, anstatt den letzten Arbeitstag zu erhalten (was meines Erachtens zu einem komplizierten Skript werden wird ... kompliziert für mich ... nicht für Scirpiting-Gurus ....) Meine Idee ist also, da die eingehende Originaldatei bereits das erforderliche Datum enthält, Dateiname. Ich muss nur das ursprüngliche Datum schreiben, um meine Anforderungen zu erfüllen, und zwar folgendermaßen: FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD khiloc vor 8 Jahren 0

1 Antwort auf die Frage

5
Pimp Juice IT

Erstellen eines DOS-Skripts zum Umbenennen von Dateien

Ursprüngliche Dateinamen:

FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD

Ich muss den ursprünglichen Dateinamen letzten Teil (DDMMYY) nehmen und in YYMMDD umwandeln.

Im Folgenden finden Sie ein Windows-Batch-Skript, das genau das tut, was Sie in Ihrer Frage aufführen. Wenn Sie eine Erklärung zu den Funktionen dieses Skripts benötigen, lassen Sie es mich wissen und ich werde der Logik Kommentare hinzufügen, um genau zu sagen, ob Sie es sind nicht sicher basierend auf dem, was ich drin habe.

Sie müssen SET SourceDir=den vollständigen Pfad der Speicherorte ändern, an denen sich die Dateien befinden, die Sie umbenennen müssen.

Ich habe die .txtDateierweiterung dieser Dateien in meinem Beispiel verwendet, aber Sie können diese im folgenden DIR /B "%SourceDir%\*_*_*.txt"Teil der Logik in eine andere Erweiterung ändern. Ich helfe dabei, wenn Sie Probleme haben, lassen Sie es mich wissen.

Wenn Ihre Dateien überhaupt keine Erweiterungen haben, lassen Sie es mich wissen, und ich füge dieser Antwort ein weiteres Beispiel hinzu, ohne dass es eine Dateierweiterung gibt, die dies für Sie abschließen wird.

Bitte beachten Sie, dass ich getestet und bestätigt habe, dass dies mit den obigen Beispielen und Erläuterungen in Ihrer obigen Frage genau wie erwartet funktioniert hat.


Windows-Batch-Skript-Beispiele

Dateiname Analysieren und Umbenennen von Dateien mit Erweiterungen

@ECHO ON  SET SourceDir=C:\PathForFilesToRename  FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*.txt""') DO (  CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA" "%%~XA"  ) GOTO EOF  :RenameLogic SET FnameNoExt=%~2 FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S) SET FnameDtPart=%FnameNoExt:~-6% SET DD=%FnameDtPart:~0,2% SET MM=%FnameDtPart:~2,2% SET YY=%FnameDtPart:~-2% SET Extension=%~3  REN "%~1" "%FnamePart1%_%YY%%MM%%DD%%Extension%" GOTO EOF 

Dateiname Analysieren und Umbenennen von Dateien Keine Erweiterungen

@ECHO ON  SET SourceDir=C:\PathForFilesToRename  FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (  CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"  ) GOTO EOF  :RenameLogic SET FnameNoExt=%~2 FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S) SET FnameDtPart=%FnameNoExt:~-6% SET DD=%FnameDtPart:~0,2% SET MM=%FnameDtPart:~2,2% SET YY=%FnameDtPart:~-2%  REN "%~1" "%FnamePart1%_%YY%%MM%%DD%" GOTO EOF 

Dateiname Parse- und Umbenennungsdateien Keine Erweiterungen mit statischem Umbenennungsteil

( Wichtiger Hinweis: Wenn zwei Dateien den gleichen YYMMDD-Namen haben, wenn sie mit dem statischen Namen umbenannt werden, ist dies ein Problem. Solange jedoch keine zwei Dateien im selben Ordner den gleichen YYMMDD-Namen haben, sollte dies auch ohne funktionieren Wenn es jedoch eine Datei gibt, die bereits mit diesem statischen Namen umbenannt wurde und die nächste dann versucht, mit demselben statischen Namen umzubenennen, ist dies ein Problem.)

Variable Anmerkung: Im Folgenden können SET StaticFnamePart=Sie festlegen, was für den statischen Umbenennungsbereich der Datei vorwärts festgelegt werden soll. Dies wird verwendet, um diesen Teil der umbenannten Datei einzufügen.

@ECHO ON  SET SourceDir=C:\PathForFilesToRename SET StaticFnamePart=MYNAME_TLD_EXT  FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (  CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"  ) GOTO EOF  :RenameLogic SET FnameNoExt=%~2 FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S) SET FnameDtPart=%FnameNoExt:~-6% SET DD=%FnameDtPart:~0,2% SET MM=%FnameDtPart:~2,2% SET YY=%FnameDtPart:~-2%  REN "%~1" "%StaticFnamePart%_%YY%%MM%%DD%" GOTO EOF 

Weitere Ressourcen und Lesen