web-dev-qa-db-fra.com

Renommez plusieurs fichiers dans cmd

Si j'ai plusieurs fichiers dans un répertoire et que je veux ajouter quelque chose à leur nom de fichier, mais pas à l'extension, comment procéderais-je?

J'ai essayé ce qui suit, avec les fichiers de test file1.txt et file2.txt:

ren *.txt *1.1.txt

Ceci renomme les fichiers en file1.1.txt et file2.txt1.1.txt

Je veux que les fichiers soient file1 1.1.txt et file2 1.1.txt

Cela sera-t-il possible à partir de cmd ou ai-je besoin d'un fichier chauve-souris pour le faire? Qu'en est-il de PowerShell?

22
Morne
for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%~i" "%%~ni 1.1%%~xi"

Si vous utilisez la boucle simple for sans le paramètre /f, les fichiers déjà renommés seront renommés.

16
Endoro

Assurez-vous qu'il y a plus de ? qu'il n'y a de caractères dans le nom le plus long:

ren *.txt "???????????????????????????? 1.1.txt"

Voir Comment la commande Windows RENAME interprète-t-elle les caractères génériques? pour plus d'informations.

Nouvelle solution - 01/12/2014

Pour ceux qui aiment les expressions régulières, il existe JREN.BAT - un utilitaire de ligne de commande hybride JScript/batch qui s’exécutera sur n’importe quelle version de Windows à partir de XP.

jren "^.*(?=\.)" "$& 1.1" /fm "*.txt"

ou

jren "^(.*)(\.txt)$" "$1 1.1$2" /i
19
dbenham

Étape 1:

Sélectionner tous les fichiers (ctrl + A)

Étape 2 :

Puis choisissez l'option renommer

 enter image description here

Étape 3: 

Choisissez votre nom de fichier ... par exemple: myfile

il renommera automatiquement myfile (01), myfile (02) , .....

Si vous voulez remplacer les espaces et les crochets, continuez étape 4

Étape 4:

Ouvrez Windows Powershell à partir de votre dossier actuel.

 enter image description here

Étape 5:

Pour remplacer les espaces vides à souligner (_)

 dir | rename-item -NewName {$_.name -replace [Regex]::Escape(" "),"_"}

Étape 6:

Pour remplacer le support ouvert

 dir | rename-item -NewName {$_.name -replace [Regex]::Escape("("),""}

Pour remplacer le support étroit

 dir | rename-item -NewName {$_.name -replace [Regex]::Escape(")"),""}
13
Ranjith Kumar

La commande ci-dessous ferait le travail.

forfiles /M *.txt /C "cmd /c rename @file \"@fname 1.1.txt\""

source: Renommer des extensions de fichiers en bloc

10
Giri
@echo off
for %%f in (*.txt) do (
    ren "%%~nf%%~xf" "%%~nf 1.1%%~xf"
)
3
Eugene

Essayez ceci Utilitaire de changement de nom en bloc Il fonctionne bien. Peut-être pas réinventer la roue. Si vous n'avez pas nécessairement besoin d'un script, c'est une bonne façon de faire.

2
Panama Jack

J'ai essayé de coller la commande d'Endoro (Merci à Endoro) directement dans l'invite de commande pour ajouter un préfixe aux fichiers, mais une erreur s'est produite. La solution consistait à réduire %% à%, donc:

for /f "delims=" %i in ('dir /b /a-d *.*') do ren "%~i" "Service.Enviro.%~ni%~xi"
1
MJA

Cela fonctionne pour votre cas spécifique: 

ren file?.txt "file? 1.1.txt" 
0
jfajunior

Cela me laisse également perplexe ... je n’ai pas aimé les parenthèses que Windows met en place lorsque vous renommez en bloc. Dans mes recherches, j'ai plutôt décidé d'écrire un script avec PowerShell. Super facile et a travaillé comme un charme. Maintenant, je peux l’utiliser chaque fois que j’ai besoin de traiter par lots le changement de nom de fichier ... ce qui est fréquent. Je prends des centaines de photos et la caméra les nomme IMG1234.JPG, etc.

Voici le script que j'ai écrit:

# filename: bulk_file_rename.ps1
# by: subcan
# PowerShell script to rename multiple files within a folder to a 
# name that increments without (#)
# create counter
$int = 1
# ask user for what they want
$regex = Read-Host "Regex for files you are looking for? ex. IMG*.JPG "
$file_name = Read-Host "What is new file name, without extension? ex. New Image "
$extension = Read-Host "What extension do you want? ex. .JPG "
# get a total count of the files that meet regex
$total = Get-ChildItem -Filter $regex | measure
# while loop to rename all files with new name
while ($int -le $total.Count)
{
    # diplay where in loop you are
    Write-Host "within while loop" $int  
    # create variable for concatinated new name - 
    # $int.ToString(000) ensures 3 digit number 001, 010, etc
    $new_name = $file_name + $int.ToString(000)+$extension
    # get the first occurance and rename
    Get-ChildItem -Filter $regex | select -First 1 | Rename-Item -NewName $new_name
    # display renamed file name
    Write-Host "Renamed to" $new_name
    # increment counter
    $int++
}

J'espère que cela sera utile à quelqu'un.

sous-can

0
subcan