У меня в папке много файлов, но все они начинаются со строки цифр и отделены от фактического имени файла знаком "_"

Например:

123123123_filename.txt

456456456_filename2.txt

789789789_filename3.txt

Я полагаю, что вы можете запустить какую-то команду, чтобы она удаляла символы перед "_" и "_".

Любая помощь очень ценится!

3 ответа3

0

Если вы не знакомы с PowerShell, вы можете взглянуть на бесплатные утилиты, такие как: http://www.bulkrenameutility.co.uk/Download.php

0

Если вы просто хотите удалить символы для списка, вы можете поместить следующее в пакетный файл, заменив соответствующий каталог вместо 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 для третьего файла?

Если то, что следует за подчеркиванием, является уникальным именем, вы можете использовать следующее для переименования файлов, заменив соответствующий каталог для соответствующего каталога:

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 , если вы не хотите видеть каждую операцию переименования в том виде, как она происходит.

0
powershell    
ls "*_*.txt" | %{mv -confirm:$false $_.name ($_.name).split("_")[1]}

PowerShell должен быть предпочтительным на Win8.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .