Вопрос или проблема
У меня много файлов в папке, но все они начинаются с строки чисел и отделяются от фактического имени файла символом “_”.
Например:
123123123_filename.txt
456456456_filename2.txt
789789789_filename3.txt
Я предполагаю, что можно выполнить какую-то команду, чтобы удалить символы перед ” _ ” и сам “_”.
Любая помощь будет очень appreciated!
Если вам некомфортно работать с PowerShell, вы можете обратить внимание на бесплатные утилиты, такие как: http://www.bulkrenameutility.co.uk/Download.php
Если вы просто хотите удалить символы для списка, вы можете поместить следующее в пакетный файл, заменив соответствующий каталог вместо dirname
for /f "tokens=2 delims=_" %%G in ('dir /b dirname') do @echo %%G
Команда dir /b
создает простой список файлов в каталоге (без заголовков или сводной информации). delims=_
указывает, что подчеркивание должно использоваться как ограничитель, а tokens=2
указывает, что вы хотите получить то, что после подчеркивания. Смотрите FOR/F для более полного объяснения, как использовать FOR /F
в пакетном файле.
Но если вы хотите переименовать файлы, убрав числа и подчеркивание, в вашем примере есть два файла, которые дали бы имя filename2.txt
, если убрать числа и подчеркивание. Что вы хотите сделать в этом случае? Или вы собирались использовать filename3.txt для третьего файла?
Если то, что следует за подчеркиванием, является уникальным именем, вы можете использовать следующее, чтобы переименовать файлы, заменив соответствующий каталог на relevantdir:
set dirname="relevantdir"
for /f "tokens=1,2 delims=_" %%G in ('dir /b %dirname%') do rename %dirname%\%%G_%%H %%H
В приведенном выше случае первый токен, %%G
, это то, что перед подчеркиванием, а второй токен, %%H
, это то, что после подчеркивания. Я объединил их для операции переименования и предшествовал им каталогом, так как команда переименования использует синтаксис RENAME [drive:][path]filename1 filename2
.
Поместите @echo off
в качестве первой строки в пакетном файле перед командой set
, если не хотите видеть каждую операцию переименования по мере её выполнения.
powershell
ls "*_*.txt" | %{mv -confirm:$false $_.name ($_.name).split("_")[1]}
powershell следует предпочитать на Win8.
PowerShell:
Принимаем, что все файлы в папке нужно переименовать (как подразумевает OP):
$Folder="c:\path\to\folder"
gci $Folder | Rename-Item -NewName { $_.Name.Split('_')[-1] }
Ответ или решение
Для удаления части имени файла в批quée файлов на Windows 8.1, вы можете воспользоваться разными подходами, но наиболее эффективными методами являются использование командной строки Windows (батч-файлы) или PowerShell. В этом ответе мы подробно рассмотрим оба способа.
1. Использование батч-файла
Если вы предпочитаете классический подход с использованием командной строки, вы можете создать батч-файл, который будет переименовывать все файлы в указанной папке, удаляя все символы перед первым знаком подчеркивания (или сам знак подчеркивания). Вот как это сделать:
Шаги:
- Создайте новый текстовый файл с расширением
.bat
. Например,rename_files.bat
. - Откройте файл в текстовом редакторе (например, Блокнот) и вставьте следующий код, заменив
C:\path\to\your\folder
на путь к вашей папке:
@echo off
set dirname="C:\path\to\your\folder"
cd %dirname%
for /f "tokens=1* delims=_" %%G in ('dir /b *.txt') do (
rename "%%G_%%H" "%%H"
)
- Сохраните файл и закройте текстовый редактор.
- Запустите батч-файл двойным щелчком.
Пояснение к коду:
@echo off
: Чтобы избежать вывода команд на экран.set dirname
: Устанавливает путь к вашей папке.cd %dirname%
: Переходит в указанную директорию.for /f "tokens=1* delims=_" %%G in ('dir /b *.txt')
: Цикл для перебора файлов в папке, деля имя файла на две части по символу подчеркивания(_)
. Первая часть%%G
игнорируется, а вторая часть%%H
будет использована в новом имени файла.rename "%%G_%%H" "%%H"
: Переименовывает файл, удаляя первую часть имени.
2. Использование PowerShell
PowerShell предоставляет более современный и мощный способ выполнения этих операций. Вот как вы можете это сделать:
Шаги:
- Откройте PowerShell: Нажмите
Win + X
и выберите "Windows PowerShell (администратор)". - Выполните следующую команду, заменив
C:\path\to\your\folder
на путь к вашей папке:
$Folder="C:\path\to\your\folder"
Get-ChildItem $Folder -Filter "*_*.txt" | Rename-Item -NewName { $_.Name.Split('_')[1] }
Пояснение к команде:
$Folder
: Задаёт путь к вашей папке.Get-ChildItem $Folder -Filter "*_*.txt"
: Находит все файлы с именами, содержащими_
в указанной папке.Rename-Item -NewName { $_.Name.Split('_')[1] }
: Переименовывает файл, оставляя лишь часть имени после символа подчеркивания.
Заключение
Воспользовавшись одним из приведённых методов, вы сможете эффективно удалить префиксы из имён файлов в вашей системе. Выберите способ, который вам больше подходит — батч-файлы для традиционного подхода или PowerShell для более современного и мощного решения. Обязательно создайте резервные копии своих файлов, прежде чем вносить изменения, особенно если вы работаете с большим объемом данных.