Hét vraag- en antwoordplatform van Nederland

Hoe kan Ik in windows in een map alle directory namen in een batch veranderen?

naam bestaat uit 3 tekens + "_"+ dag + maand bv. 456_2906 of 457_3006
Het resultaat moet worden een dir naam 2016-06-29 of 2016-06-30
Het zou mogelijk moeten zijn met powershell maar daar kom ik even niet uit.

Verwijderde gebruiker
7 jaar geleden
2.2K
Verwijderde gebruiker
4 jaar geleden
Ik heb een soortgelijk probleem nl.
9-5-2018
dit moet worden
2018-05-09 met voorloopnullen
Zodat dit netjes gesorteerd wordt op datum en niet op dag
Is dit hierop aan te passen

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Antwoorden (3)

Ik kom op het volgende script. Het getal voor de underscore wordt genegeerd, en de aanname is dat dag en maand altijd uit twee cijfers bestaan (dus evt. met voorloopnullen). Het jaar staat vast op 2016. Als die aannames niet goed zijn moet het script natuurlijk anders!

Hopelijk is dit wat je zoekt. Hieronder een link waar ik mijn inspiratie opgedaan heb...

$startPath = "C:\Temp";

$folderItems = $(get-childitem "$startPath");

foreach( $folder in $folderItems)
{
if($folder.PSisContainer -and ($folder -imatch "^\d{3}_(\d{2})(\d{2})$") ) {
$dag = $matches[1];
$maand = $matches[2];
$newName = "2016-$maand-$dag";

if (-Not (Test-Path $newName)) {
Write-Host "Renaming $folder to $newName";
Rename-Item $folder $newName;
}
else {
Write-Host "Skipping $folder because $newName already exists!";
}
}
else {
Write-Host "Ignoring: $folder";
}
}
(Lees meer...)
Verwijderde gebruiker
7 jaar geleden
Verwijderde gebruiker
7 jaar geleden
Bedankt werkt als een trein
Deze oneliner:

ls -Directory | %{ ren $_ $(($_.name -replace ‘(.*?)_(\d{2})(\d{2})’,‘2016-$3-$2’)) }

Doet het volgende:
———————————
PS C:\tmp\z> ls -name -Directory
456_2906
457_3006

PS C:\tmp\z> ls -Directory | %{ ren $_ $(($_.name -replace ‘(.*?)_(\d{2})(\d{2})’,‘2016-$3-$2’)) }

PS C:\tmp\z> ls -name -Directory
2016-06-29
2016-06-30
———————————

NB 1: Als je nog iets met die "456" of "457" wilt, voeg dan in het tweede "-replace" argument (de regex replacement string met backreferences) iets met $1 toe (dat is het resultaat van de eerste capturing group).

NB 2: Als er geen directories zijn die aan het eerste argument van de -replace opdracht voldoen (de regex search string) dan komt er een foutmelding. Eventueel error checking toevoegen zoals in het andere antwoord.
(Lees meer...)
Verwijderde gebruiker
7 jaar geleden
Verwijderde gebruiker
7 jaar geleden
Bedankt werkt als een trein
Gebruik het gratis programma Totalcommander, hier zit een heel krachtige hernoem tool, die alvorens je het uitvoert het resultaat laat zien i.t.t. bovengenoemde scripts.
Je selecteert de desbetreffende directories(inclusief sub directories) en dan CTRL-M en kies je het juiste "file-mask"
(Lees meer...)
Verwijderde gebruiker
7 jaar geleden
Verwijderde gebruiker
7 jaar geleden
True. Total Commander rocks. (En rocks ook al jaaaarenlang.) En inderdaad, de file renaming tool is een beest. Ondersteunt gelukkig ook regex backreferences, dus deze rename operations hadden daar inderdaad ook mee gekund. Powershell is echter wel een heel stuk sneller als het om heel veel bestanden gaat.
Verwijderde gebruiker
7 jaar geleden
Overigens is het programma zeker niet gratis, al kun je in principe wel de expired trial version eindeloos gebruiken alle features (maar dan moet je een boxje wegklikken bij het opstarten).

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 2500
Gekozen afbeelding