Переименование нескольких папок. Обрезка до первых х символов

1433
Tim

Простой пример: (моя проблема связана с тысячами папок)

У меня есть две папки с именами:

"A0000001_words_letters"

"A0000002_lots_of_numbers"

Как бы я автоматически обрезал все имена папок, чтобы они просто содержали начало AXXXXXXX. Это начало всегда будет одинаковым количеством символов, поэтому эффективно сохраните первые x символов имени.

Спасибо

2
Вы получаете какие-либо из моих сообщений? Вы видели [Принятие ответа] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), чтобы понять, как это работает? Pimp Juice IT 6 лет назад 0

2 ответа на вопрос

0
Pimp Juice IT

Вы можете использовать цикл FOR / F для установки разделителей и маркеров, разбирающих части имен папок, и использовать их для установки переменных для последующего использования с командой REN .

Вы также хотите использовать Setlocal EnableDelayedExpansion для обработки расширения переменных, установленных в цикле, соответственно, для правильного использования (не анализируемого во время выполнения) с командой переименования на итерацию в цикле.

@ECHO  SET srcdir=C:\folder\path SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "%srcdir%\*"') DO ( SET fname=%%~F SET fname=!fname:~0,8! SET fname=!fname! REN "%srcdir%\%%~XNF" "!fname!" ) EXIT 

Дополнительные ресурсы

0
dbenham

Если _после первых x символов всегда есть после, то из командной строки будет работать следующее (пакет не требуется)

for /d %A in (*) do @for /f "delims=_ eol=_" %B in ("%A") do ren "%A" "%B" 

Удвойте проценты, если поместить вышеуказанную команду в пакетный скрипт.

Если вы не можете рассчитывать _после первых x символов, то эта команда должна работать из командной строки, сохраняя первые 8 символов:

for /d %A in (*) do @set "folder=%A"&call ren "%^folder%" "%^folder:~0,8%" 

Или вы можете использовать этот пакетный скрипт для сохранения первых 8 символов:

@echo off setlocal disableDelayedExpansion for /d %%A in (*) do ( set "folder=%%A" setlocal enableDelayedExpansion ren "!folder!" "!folder:~0,8!" endlocal ) 

Или вы можете использовать мою утилиту переименования регулярных выражений JREN.BAT . Это чистый скрипт (гибридный пакет / JScript), который работает на любом компьютере с Windows начиная с XP - сторонний exe-файл не требуется.

Удалить все с первого _раза

jren "_.*" "" /d 

Сохранить первые 8 символов

jren "^(.).*" "$1" /d 

Примечание. Если вы пытаетесь переименовать файлы вместо папок, вы можете сделать что-то вроде

ren *.txt ????????.txt 

Но, к сожалению, вы не можете использовать подстановочные знаки при переименовании папок. Так что эта техника бесполезна для папок. См. Как команда Windows RENAME интерпретирует подстановочные знаки? для получения дополнительной информации.

Похожие вопросы