Ordner umbennen mit Datum (-1Monat)
Hallo liebe Comunity,
folgendes möchte ich gerne umsetzen…
IST:
Datum = 21.11.2019
Laufwerksname1 = abc
darin -> Ordner1
oder
Laufwerksname2 = xyz
darin -> Ordner1
Soll:
„Ordner 1“ umbenennen in „Laufwerksnamen + aktuelles Jahr + aktueller Monat (-1 Monat)
also
Ordner1 => abc_201910
oder
Ordner1 => xyz_201910
Bisher habe ich:
REM Laufwerkbezeichnung finden
for /f "tokens=2 delims==" %%a in ('wmic volume where DriveLetter^="%DriveLetter%" get Label /value') do (
set "DriveLabel=%%a"
)
REM Verzeichnis umbenennen mit Laufwerkbezeichnung und Datum
if exist %ZielT% (
for /f "delims=" %%i in ('dir /b "%ZielTDatum%"') do set "zielTDatum=%%i"
for %%i in ("%zielTDatum%") do ren %%i "%%b_%Drivelabel%_%Datum%%%~xi"
Ergebnis:
abc_201911
xyz_201911
Problem wird der Januar sein, wo man dann die Bezeichnung
abc_202000 hätte !!!!
Variante:
Wie kann man den Monat und das Jahr anhand einer Datei innerhalb des Ordner1 abfangen und nutzen???
Danke schon mal
folgendes möchte ich gerne umsetzen…
IST:
Datum = 21.11.2019
Laufwerksname1 = abc
darin -> Ordner1
oder
Laufwerksname2 = xyz
darin -> Ordner1
Soll:
„Ordner 1“ umbenennen in „Laufwerksnamen + aktuelles Jahr + aktueller Monat (-1 Monat)
also
Ordner1 => abc_201910
oder
Ordner1 => xyz_201910
Bisher habe ich:
REM Laufwerkbezeichnung finden
for /f "tokens=2 delims==" %%a in ('wmic volume where DriveLetter^="%DriveLetter%" get Label /value') do (
set "DriveLabel=%%a"
)
REM Verzeichnis umbenennen mit Laufwerkbezeichnung und Datum
if exist %ZielT% (
for /f "delims=" %%i in ('dir /b "%ZielTDatum%"') do set "zielTDatum=%%i"
for %%i in ("%zielTDatum%") do ren %%i "%%b_%Drivelabel%_%Datum%%%~xi"
Ergebnis:
abc_201911
xyz_201911
Problem wird der Januar sein, wo man dann die Bezeichnung
abc_202000 hätte !!!!
Variante:
Wie kann man den Monat und das Jahr anhand einer Datei innerhalb des Ordner1 abfangen und nutzen???
Danke schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 517516
Url: https://administrator.de/contentid/517516
Ausgedruckt am: 20.11.2024 um 13:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
mit der Powershell ein Einzeiler:
Die Zeile geht alle Laufwerke durch und benennt Ordner1 so um, wie gewünscht. Wenn Ordner1 nicht existiert, dann gibt es eine Fehlermeldung.
hth
Erik
mit der Powershell ein Einzeiler:
get-psdrive -psprovider filesystem | %{move-item -path "$($_.root)\Ordner1" -destination "$(get-date -format "yyMMdd" -month $($(get-date -format "MM")-1))_$($_.description)"}
Die Zeile geht alle Laufwerke durch und benennt Ordner1 so um, wie gewünscht. Wenn Ordner1 nicht existiert, dann gibt es eine Fehlermeldung.
hth
Erik
Nö, denn er wollte das Volumelabel im Namen haben und das Datum im Format YYYYMM und nicht YYMMDD.
Darüber hinaus
ist viel zu kompliziert. Mach sowas lieber so:
Am Ende würde ich das auch besser mit Powershell lösen, jedoch so:
Zuerst werden die Partition abgerufen und mit "Test-Path" geprüft, ob der Ordner "Ordner1" vorhanden ist - falls ja wird dieser dann umbenannt ins gewünschte Format "Label_YYYYMM".
Darüber hinaus
"$(get-date -format "yyMMdd" -month $($(get-date -format "MM")-1))"
(get-date).addmonths(-1).tostring("yyyyMM")
Am Ende würde ich das auch besser mit Powershell lösen, jedoch so:
get-volume | ? {Test-Path ($_.driveletter+':\Ordner1')} | % {
ren ($_.driveletter+':\Ordner1') ($_.filesystemlabel+'_'+(get-date).addmonths(-1).tostring("yyyyMM"))
}
Zuerst werden die Partition abgerufen und mit "Test-Path" geprüft, ob der Ordner "Ordner1" vorhanden ist - falls ja wird dieser dann umbenannt ins gewünschte Format "Label_YYYYMM".
Und in ne Batch eingebaut sieht das dann z.B. so aus
@echo off
powershell -ExP ByPass -NoP -C "gcim Win32_Volume | ?{Test-Path \"$($_.Driveletter\Ordner1)\" -and $_.Label -ne ''} | %%{rename-item \"$($_.Driveletter)\Ordner1\" -NewName \"$($_.Label)_$((get-date).AddMonths(-1).toString('yyyyMM'))\" -verbose}"
Da der Thread noch nicht auf gelöst gesetzt wurde, nehme ich mal an du bist mit einer Powershell Lösung nicht zufrieden... als reines Batchscript wäre dann sowas möglich:
Erläuterung:
Für jedes Volume wird das Änderungsdatum von Ordner1 ausgegeben. Sofern dieses nicht leer ist (was der Fall wäre, wenn der Ordner nicht existiert), wird eine Variable time mit dem Datum gesetzt (Format ist "DD.MM.YYYY HH:SS").
Sofern von der Variable "time" ab der 3.Stelle angefangen die ersten 2 Stellen (also der Monat) = "01" ist, wird eine Variable "month" auf 12 gesetzt und eine Variable "year" auf das Jahr -1 gesetzt, sonst wird die Variable Monat auf -1 (Beachte: Da "08" und "09" als ungültige Oktalwerte angesehen würden, muss hier eine 1 vorangestellt werden; folglich dann Minus 101 gerechnet werden!) gesetzt und die Variable year auf das Jahr.
Zum Schluss folgt dann das umbennenen des Ordners
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2 skip=2" %%a in ('wmic volume get driveletter^,label') do (
for %%c in ("%%a\Ordner1") do (
if "%%~tc" neq "" (
set Time=%%~tc
if "!Time:~3,2!" equ "01" (
set month=12
set /a year=!time:~6,4!-1
) else (
set /a month=1!time:~3,2!-101
set month=0!month!
set month=!month:~-2!
set year=!time:~6,4!
)
ren "%%a\Ordner1" "%%b_!year!!month!"
)))
Für jedes Volume wird das Änderungsdatum von Ordner1 ausgegeben. Sofern dieses nicht leer ist (was der Fall wäre, wenn der Ordner nicht existiert), wird eine Variable time mit dem Datum gesetzt (Format ist "DD.MM.YYYY HH:SS").
Sofern von der Variable "time" ab der 3.Stelle angefangen die ersten 2 Stellen (also der Monat) = "01" ist, wird eine Variable "month" auf 12 gesetzt und eine Variable "year" auf das Jahr -1 gesetzt, sonst wird die Variable Monat auf -1 (Beachte: Da "08" und "09" als ungültige Oktalwerte angesehen würden, muss hier eine 1 vorangestellt werden; folglich dann Minus 101 gerechnet werden!) gesetzt und die Variable year auf das Jahr.
Zum Schluss folgt dann das umbennenen des Ordners