2014-08-04 2 views
1

Я пытаюсь прокрутить каждую папку под «источником» и удалить добавленное расширение.Удаление части имени каждой папки в пакете

Например,

\pathTo\source\FirstComponent.1.5\... 
\pathTo\source\SecondComponent.4.6\... 

Изменен,

\pathTo\source\FirstComponent\... 

Вот что я до сих пор ...

SETLOCAL 
set "SourceDir=C:\pathTo\source" 
FOR /d %%i IN ("%SourceDir%") DO FOR /f "delims=." %%j IN ("%%i") DO REN "%%~i" "%%~j%%~xi" 
+0

Удалите это '%% ~ xi' и поставьте эхо перед« REN », чтобы вы могли видеть результаты в первую очередь перед вы его совершаете. – foxidrive

+0

Имеет ли строка версии в конце имени папки 4 символа?Тогда было бы лучше переименовать папки, удалив эти 4 символа в конце имени папки в случае последнего, а третьего символа - точки. – Mofi

ответ

2

foxidrive дал уже правильную помощь, чтобы найти решение ,

@echo off 
set "SourceDir=C:\pathTo\source" 
FOR /d %%i IN ("%SourceDir%\*") DO FOR /f "delims=." %%j IN ("%%i") DO REN "%%~i" "%%~nj" 
set SourceDir= 

%%~nj вместо %%j необходимо удалить путь к папке и получить только новое имя папки без пути.

А также можно будет следующее как предложено Andriy M:

@echo off 
set "SourceDir=C:\pathTo\source" 
FOR /d %%i IN ("%SourceDir%\*") DO FOR /f "delims=." %%j IN ("%%~ni") DO REN "%%~i" "%%j" 
set SourceDir= 

Это даже лучше, в случае одного из родительских папок также содержит точку в имени.

Но если все папки имеют точку в имени, как Component.One до версии строки, которая должна быть сохранена, следующий пакетный код может быть использован:

@echo off 
set "SourceDir=C:\pathTo\source" 
FOR /d %%i IN ("%SourceDir%\*") DO FOR /f "tokens=1,2* delims=." %%j IN ("%%~ni") DO REN "%%~i" "%%j.%%k" 
set SourceDir= 

И еще одно решение, которое удаляет последний 4 символов из имени папки, если последний, но третий символ является точка:

@echo off 
setlocal EnableDelayedExpansion 
set "SourceDir=C:\pathTo\source" 
FOR /d %%i IN ("%SourceDir%\*") DO (
    set "FolderName=%%~nxi" 
    if "!FolderName:~-4,1!"=="." REN "%%~i" "!FolderName:~0,-4!" 
) 
endlocal 
+1

Или вы могли бы использовать '~ n' в более ранней точке вместо этого:' ... %% j IN ("%% ~ ni") DO REN "%% ~ i" "%% ~ j" '. –

+0

Проблема в том, что у моего имени компонента есть «.». в этом. Таким образом, команда очищает мой номер версии. – rockymonkey555

+0

Component.One.3.5 становится Component – rockymonkey555

1

Если имена папок, которые вам нужно исправить всегда в этом формате

name.number.number 

и вам нужно удалить .number.number части, вы можете также использовать этот метод:

SETLOCAL 
SET "SourceDir=C:\pathTo\source" 
FOR /D %%I IN ("%SourceDir%") DO (
    FOR %%J IN ("%%~nI") DO RENAME "%%~I" "%%~nJ" 
) 

В принципе, идея заключается в том, чтобы рассматривать номера версии в качестве расширений имен. Внутренний цикл использует выражение %%~nI, чтобы взять только имя папки без расширения, то есть без последних .number, и результат присваивается %%J. Аналогичным образом команда RENAME использует %%~nJ, чтобы избавиться от оставшихся .number (первый в исходном названии). И так, используя имя FirstComponent.1.5 в качестве примера, команда ПЕРЕИМЕНОВАТЬ по существу заканчивается так:

RENAME "...\FirstComponent.1.5" "FirstComponent" 

Поскольку метод в основном только капли двух последних расширений, вы можете иметь, однако большие номера версий: 10.123, 2014.12. .. Единственным ограничением метода является то, что номера версий должны состоять из двух частей. (Он может дополнительно поддерживать номера версии с одной частью, если вашим именам не разрешено иметь номер ..)

Смежные вопросы