3

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

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

"A0000001_words_letters"

"A0000002_lots_of_numbers"

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

Спасибо

2 ответа2

0

Вы можете использовать цикл 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

Если после первых 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 "^(.{8}).*" "$1" /d

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

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

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

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