web-dev-qa-db-fra.com

renommer le fichier batch Windows

J'ai un fichier tel que AAA_a001.jpg, BBB_a002.jpg, CCC_a003.jpg sous Windows 7 Et j'essaie d'utiliser batch pour renommer ces fichiers en a001_AAA.jpg, a002_BBB.jpg, a003_CCC.jpg.

Juste pour échanger le contenu entre _.

Je cherche depuis un moment, mais je ne sais toujours pas comment faire cela… .. Quelqu'un peut-il m'aider? Merci.

10
yuchien
@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

Remarque: le nom est divisé à la première occurrence de _. Si un fichier s'appelle "part1_part2_part3.jpg", il sera renommé "part2_part3_part1.jpg".

7
dbenham

Utiliser la commande REN

Ren est pour rename

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

exemple

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

cela changera aaa.txt en bbb.txt

Votre code sera:

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

etc

IT WILL NOT WORK IF THERE IS SPACES!

J'espère que ça aide: D

31
Itsproinc

comme dit Itsproinc, la commande REN fonctionne!

mais si votre chemin/nom de fichier contient des espaces, utilisez des guillemets ""

exemple:

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

ajouter " "

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

j'espère que ça aide

6
M.S.M.

Je suppose que vous connaissez la longueur de la partie avant le _ et après le trait de soulignement, ainsi que l'extension. Si vous ne le faites pas, cela pourrait être plus complexe qu'une simple sous-chaîne.

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
)

Je viens juste de trouver ce script et je ne l'ai pas testé. Consultez this et that pour plus d'informations.

SI vous voulez supposer que vous ne connaissez pas les positions du _ et les longueurs et l'extension, je pense que vous pourriez faire quelque chose avec les boucles for pour vérifier l'index du _, puis le dernier index du ., l'enrouler une chose goto et le faire fonctionner. Si vous êtes prêt à traverser ce problème, je vous suggère d'utiliser WindowsPowerShell (ou Cygwin) au moins (pour votre propre bien) ou d'installer un langage de script plus avancé (pensez Python/Perl). façon.

1
jadkik94

Je renomme en 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 

)
0
jimra