У меня в папке много файлов, но все они начинаются со строки цифр и отделены от фактического имени файла символом «_».
Например:
123123123_имя_файла.txt
456456456_имя_файла2.txt
789789789_имя_файла3.txt
Я полагаю, что вы можете запустить какую-то команду, которая удалит символы перед «_» и сам «_».
Любая помощь будет высоко оценена!
решение1
Если вы не совсем уверены в себе при работе с PowerShell, возможно, вам стоит взглянуть на бесплатные утилиты, например: http://www.bulkrenameutility.co.uk/Download.php
решение2
Если вы просто хотите удалить символы из листинга, вы можете поместить следующее в пакетный файл, заменив соответствующий каталог вместоdirname
for /f "tokens=2 delims=_" %%G in ('dir /b dirname') do @echo %%G
Создает dir /b
пустой формат списка каталогов (без заголовочной информации или резюме). Указывает, delims=_
что в качестве разделителя следует использовать подчеркивание, а указывает, tokens=2
что вам нужно то, что находится после подчеркивания. СмотритеЗА/Фдля более полного объяснения того, как использовать FOR /F
в пакетном файле.
Но если вы хотите переименовать файлы без цифр и подчеркивания, в вашем примере у вас есть два файла, которые дадут имя, filename2.txt
если убрать цифры и подчеркивание. Что вы хотите сделать в этом случае? Или вы намеревались использовать filename3.txt для третьего файла?
Если после подчеркивания указано уникальное имя, вы можете использовать следующую команду для переименования файлов, заменив соответствующий каталог нарелевантныйкаталог:
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
решение3
powershell
ls "*_*.txt" | %{mv -confirm:$false $_.name ($_.name).split("_")[1]}
PowerShell должен быть предпочтительнее на Win8.
решение4
PowerShell: Предположим, что все файлы в папке необходимо переименовать (как подразумевает OP):
$Folder = 'c:\path\to\folder'
gci $Folder | Rename-Item -NewName { $_.Name.Split('_')[-1] }