2016-04-22 12 views
0

Etwas seltsames passiert mir. Ich habe vor einigen Jahren eine Umbenennungs-Batch-Datei zusammengestellt (mit einer Menge Hilfe von verschiedenen Stellen, einschließlich StackOverflow) für ein Projekt, an dem ich gerade arbeitete. Es würde einige Dateien umbenennen und ihnen die ersten 5 Zeichen aus dem übergeordneten Ordner (z. B. "12345 - Site") voranstellen. Ich habe die BAT-Datei für ein paar Monate nicht verwendet und muss jetzt, aber es funktioniert nicht richtig.Umbenennen BAT plötzlich nicht richtig funktioniert

Es ist das Umbenennen der Dateien, aber es verwendet den gesamten übergeordneten Ordner statt nur die ersten 5 Zeichen. Ich habe es auf einem anderen PC getestet und habe es in Ordnern ausgeführt, wo es vorher funktioniert hat.

Hat jemand irgendwelche Ideen, warum das passieren würde, wie es zu beheben, oder was ich in die Batch-Datei hinzufügen könnte, um das gleiche Ergebnis zu erzielen?

Nur um darauf hinzuweisen, bin ich ein kompletter Neuling und habe viele Nächte damit verbracht, die erste Batch-Datei durch Versuch und Irrtum zu bearbeiten und aus ähnlichen Batch-Dateianfragen im Web auszuschneiden und einzufügen.

Mein aktueller Code:

for %%z in ("%cd%") do (
for %%a in ("%%~dpz%\.") do (
for /f "delims=" %%i in ('dir /b /a-d *.pdf,*.xlsx,*.docx,*.xlsm') do move "%%i" "%%~nxz %%i")) 
+2

Es gibt nichts im Code, der etwas zu "ersten 5 Zeichen" verkürzen könnte. Wenn es das vorher getan hat, war es eine andere Batchdatei. – Stephan

+0

Es sieht so aus als wäre mein Original vorbei geschrieben worden. :(Gibt es eine Möglichkeit, die ersten 5 Zeichen davon zu extrahieren? – Legg1979

+1

die Absicht Ihres Stapels ist mir nicht klar, die erste FOR-Schleife sollte nur einmal ausgeführt werden, für den Wert des aktuellen Verzeichnisses und den Index% a von der zweite FOR wird überhaupt nicht benutzt, er wiederholt nur den ersten% z-Index.Was ist der Wert, aus dem Sie die ersten 5 Zeichen extrahieren möchten? –

Antwort

3

Dies sollte für Sie arbeiten.

for %%z in ("%cd%") do (
    for %%a in ("%%~dpz%\.") do (
     for /f "delims=" %%i in ('dir /b /a-d *.pdf,*.xlsx,*.docx,*.xlsm') do call :renameStuff "%%i" "%%~nxz" 
     ) 
    ) 
goto :eof 

:renameStuff 
set "originalName=%~1" 
set "parentFolder=%~2" 
echo move "%originalName%" "%parentFolder:~0,5% %originalName%" 
exit /b 

Die spezifische Bit Sie suchen ist %parentFolder:~0,5%, die nach 5 Zeichen eine Teil% parent% ab Zeichen 0 und Anhalten nimmt. Dies gibt Ihnen die ersten 5 Zeichen, nach denen Sie suchen.

Das schwierige Bit ist, dass Sie nicht auf diese for Schleife %%z Typ Variablen verwenden können. Daher müssen Sie es an eine andere Variable übergeben. Außerdem, weil Sie einige verschachtelte Schleifen haben, macht die verzögerte Expansion das wirklich hässlich, also habe ich die Variable in eine Subroutine (call :renameStuff "%%i" "%%~nxz") übergeben, die diese in %1 und %2 Typvariablen verwandelt und sie dann in gewöhnliche Variablen weitergibt (set "originalName=%~1") damit wird es funktionieren.

+1

@ Legg1979: das 'echo' druckt nur den' move'-Befehl auf den Bildschirm, anstatt es auszuführen (Sicherheitsgründe). Sobald die Ausgabe gut aussieht, einfach entfernen das Wort "echo". Vielleicht möchten Sie auch füge '@echo off' als erste Zeile ein. Es weist das Skript an, nicht jeden Befehl auf dem Bildschirm zu drucken, bevor er ausgeführt wird. (Dies sind die Grundlagen, aber da Sie behaupten, ein komplettes Noob zu sein, dachte ich, es ist erwähnenswert) – Stephan

+0

Die 'for %% a'-Schleife (bereits im ursprünglichen Code vorhanden) ist völlig sinnlos,' %% a' ist nie benutzt; (Wenn es sinnvoll ist, sollte die Menge %% ~ dpz% \. '' %% ~ dpz.'); Es zählt alle Elemente des übergeordneten Verzeichnisses des aktuellen Verzeichnisses auf, aber die iterierten Elemente werden nie verwendet. In jeder Iteration versucht die innere 'for/F'-Schleife die Dateien umzubenennen, daher kann es vorkommen, dass den Dateien mehrere fünfstellige Präfixe vorangestellt sind ... – aschipfl

+0

@Wes Larson Danke, dein Code erinnert mich irgendwie daran ein zusätzliches Teil, das im Original gewesen sein könnte. Ich bin mir sicher, dass es irgendwie überschrieben wurde. Ich habe es jetzt doppelt gesichert, tho !! – Legg1979