Ответ 1
for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%~i" "%%~ni 1.1%%~xi"
Если вы используете простой цикл for
без параметра /f
, уже переименованные файлы будут снова переименованы.
Если у меня есть несколько файлов в каталоге и вы хотите добавить что-то к их именам файлов, но не к расширению, как бы я это сделал?
Я пробовал следующее, с тестовыми файлами file1.txt
и file2.txt
:
ren *.txt *1.1.txt
Это переименовывает файлы в file1.1.txt
и file2.txt1.1.txt
Я хочу, чтобы файлы были file1 1.1.txt
и file2 1.1.txt
Будет ли это возможно из cmd или мне нужно иметь файл bat для этого? Как насчет PowerShell?
for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%~i" "%%~ni 1.1%%~xi"
Если вы используете простой цикл for
без параметра /f
, уже переименованные файлы будут снова переименованы.
Убедитесь, что есть больше ?
, чем есть символы в самом длинном имени:
ren *.txt "???????????????????????????? 1.1.txt"
См. Как команда Windows RENAME интерпретирует подстановочные знаки? для получения дополнительной информации.
Новое решение - 2014/12/01
Для тех, кто любит регулярные выражения, есть JREN.BAT - гибридная утилита командной строки JScript/batch, которая будет работать на любой версии Windows от XP вперед.
jren "^.*(?=\.)" "$& 1.1" /fm "*.txt"
или
jren "^(.*)(\.txt)$" "$1 1.1$2" /i
Следующая команда выполнит задание.
forfiles /M *.txt /C "cmd /c rename @file \"@fname 1.1.txt\""
Шаг 1:
Выберите все файлы (ctrl + A)
Шаг 2:
Затем выберите вариант переименования
Шаг 3:
Выберите свое имя файла... для ex: myfile
он автоматически переименовывается в myfile (01), myfile (02),.....
Если вы хотите заменить пробелы и скобки. continue Шаг 4
Шаг 4:
Откройте Windows Powershell из текущей папки
Шаг 5:
Для замены пустого пространства на подчеркивание (_)
dir | rename-item -NewName {$_.name -replace [Regex]::Escape(" "),"_"}
Шаг 6:
Для замены открытой скобки
dir | rename-item -NewName {$_.name -replace [Regex]::Escape("("),""}
Для замены закрывающей скобки
dir | rename-item -NewName {$_.name -replace [Regex]::Escape(")"),""}
@echo off
for %%f in (*.txt) do (
ren "%%~nf%%~xf" "%%~nf 1.1%%~xf"
)
Попробуйте утилита переименования переполнений Это хорошо работает. Возможно, не изобретать велосипед. Если вам не нужен необходимый script, это хороший способ.
Я попробовал вставить команду Endoro (Thanks Endoro) прямо в командную строку, чтобы добавить префикс в файлы, но столкнулся с ошибкой. Решение заключалось в уменьшении %% до%, поэтому:
for /f "delims=" %i in ('dir /b /a-d *.*') do ren "%~i" "Service.Enviro.%~ni%~xi"
Я был озадачен этим также... не понравился круглые скобки, которые окна вставляют, когда вы переименовываете их навалом. В своем исследовании я решил написать script с помощью PowerShell. Супер легкий и работал как шарм. Теперь я могу использовать его всякий раз, когда мне нужно пакетное переименование файлов... что часто. Я беру сотни фотографий, и камера называет их IMG1234.JPG и т.д.
Вот script Я написал:
# 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++
}
Я надеюсь, что это поможет кому-то там.
subcan