Windows batchbestand hernoemen

Ik heb een bestand zoals AAA_a001.jpg, BBB_a002.jpg, CCC_a003.jpgin Windows 7
en ik probeer batch te gebruiken om deze bestanden te hernoemen naar a001_AAA.jpg, a002_BBB.jpg, a003_CCC.jpg.

Gewoon om de inhoud te wisselen tussen _.

Ik ben al een tijdje aan het zoeken, maar weet nog steeds niet hoe ik dit moet doen.
Kan iemand helpen?
Bedankt.


Antwoord 1, autoriteit 100%

@echo off
pushd "pathToYourFolder" || exit /b
for /f "eol=: delims=" %%F in ('dir /b /a-d *_*.jpg') do (
  for /f "tokens=1* eol=_ delims=_" %%A in ("%%~nF") do ren "%%F" "%%~nB_%%A%%~xF"
)
popd

Opmerking: de naam wordt gesplitst bij de eerste keer dat _voorkomt. Als een bestand de naam “part1_part2_part3.jpg” heeft, wordt het hernoemd naar “part2_part3_part1.jpg”


Antwoord 2, autoriteit 96%

Gebruik REN-opdracht

RENis voor rename

ren ( where the file is located ) ( the new name )

voorbeeld

ren C:\Users\&username%\Desktop\aaa.txt bbb.txt

het verandert aaa.txt in bbb.txt

Uw code is:

ren (file located)AAA_a001.jpg a001.AAA.jpg
ren (file located)BBB_a002.jpg a002.BBB.jpg
ren (file located)CCC_a003.jpg a003.CCC.jpg

en ga zo maar door

IT WILL NOT WORK IF THERE IS SPACES!

Hopelijk helpt het 😀


Antwoord 3, autoriteit 70%

zoals Itsproinc zei, de opdracht RENwerkt!

maar als uw bestandspad/naam spaties bevat, gebruik dan aanhalingstekens ” “

voorbeeld:

ren C:\Users\&username%\Desktop\my file.txt not my file.txt

voeg ” ” toe

ren "C:\Users\&username%\Desktop\my file.txt" "not my file.txt"

Ik hoop dat het helpt


Antwoord 4, Autoriteit 10%

Ik neem aan dat u de lengte van het deel kent vóór de _en na de onderstrepingsteken, evenals de extensie. Als u het niet complexer bent dan een eenvoudige substring.

cd C:\path\to\the\files
for /f %%a IN ('dir /b *.jpg') do (
set p=%a:~0,3%
set q=%a:~4,4%
set b=%p_%q.jpg
ren %a %b
)

Ik kwam gewoon met dit script, en ik heb het niet getest. Uitchecken dit en dat voor meer informatie.

Als u wilt veronderstellen, weet u niet de posities van de _en de lengtes en de extensie, ik denk dat u iets mee kunt doen voor loops om de index van de _, Dan de laatste index van de ., wikkel het in een gotoDing en laat het werken. Als je bereid bent om door die problemen te gaan, zou ik voorstellen dat je WindowsPowershell (of Cygwin) tenminste (voor je eigen sake) gebruikt of een meer geavanceerde scripttaal installeert (denk aan Python / Perl) manier.


Antwoord 5

I Hernoem in code

echo off
setlocal EnableDelayedExpansion
for %%a in (*.txt) do (
    REM echo %%a
    set x=%%a
    set mes=!x:~17,3!
    if !mes!==JAN (
        set mes=01
    )
    if !mes!==ENE (
        set mes=01
    )
    if !mes!==FEB (
        set mes=02
    )
    if !mes!==MAR (
        set mes=03
    )
    if !mes!==APR (
        set mes=04
    )
    if !mes!==MAY (
        set mes=05
    )
    if !mes!==JUN (
        set mes=06
    )
    if !mes!==JUL (
        set mes=07
    )
    if !mes!==AUG (
        set mes=08
    )
    if !mes!==SEP (
        set mes=09
    )
    if !mes!==OCT (
        set mes=10
    )
    if !mes!==NOV (
        set mes=11
    )
    if !mes!==DEC (
        set mes=12
    )
    ren %%a !x:~20,4!!mes!!x:~15,2!.txt 
    echo !x:~20,4!!mes!!x:~15,2!.txt 
)

Antwoord 6

De Powershell Way werkt voor mij en gemakkelijker te begrijpen en te veranderen. Heb echter fouten als rename-item : Source and destination path must be differenttotdat ik het een beetje veranderd.
Om alleen bestanden van de map te hernoemen:

dir | Waar-object {$ .Name -Match ‘vervanging’} | RenoN-Item -NEWName {$ .Name -replace ‘vervanging’, ‘mynewtext’}

Om bestanden van de map- en submappen opnieuw te noemen, recursief:

Get-Childitem -Recurse | Waar-object {$ .Name -Match ‘.core.’} | Rename-Item -NEWName {$ .Name -replace ‘.core.’, ‘. Kader.’ }


Antwoord 7

Ik vond deze oplossing via PowerShell:

dir | rename-item -NewName {$_.name -replace "replaceME","MyNewTxt"}

Hiermee wordt onderdelen van alle bestanden hernoem in de huidige map.

Other episodes