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?
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.
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
Étape 1:
Sélectionner tous les fichiers (ctrl + A)
Étape 2 :
Puis choisissez l'option renommer
É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.
É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(")"),""}
La commande ci-dessous ferait le travail.
forfiles /M *.txt /C "cmd /c rename @file \"@fname 1.1.txt\""
@echo off
for %%f in (*.txt) do (
ren "%%~nf%%~xf" "%%~nf 1.1%%~xf"
)
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.
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"
Cela fonctionne pour votre cas spécifique:
ren file?.txt "file? 1.1.txt"
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