2013-10-05 4 views
0

Я знаю только основные командные строки в DOS. Я слышал, что есть переменная, которую вы можете использовать для переименования файлов в каталоге. То, что у меня есть следующие:Dos batch file - переименование некоторых файлов

C: \ Temp \ 874540_MyVacation1_x.jpg

C: \ Temp \ 451157_MyVacation2_x.jpg

C: \ Temp \ 874211_MyVacation3_x.jpg

C : \ Temp \ 652120_MyVacation4_x.jpg

C: \ Temp \ 541547_MyVacation5_x.jpg

C: \ Temp \ 321778_M yVacation6_x.jpg

Я пытаюсь избавиться от первых 7 символов, а заменить x с bz. Так что это выглядит следующим образом:

C: \ Temp \ MyVacation1_bz.jpg

C: \ Temp \ MyVacation2_bz.jpg

C: \ Temp \ MyVacation3_bz.jpg

C : \ Temp \ MyVacation4_bz.jpg

C: \ Temp \ MyVacation5_bz.jpg

C: \ Temp \ MyVacation6_bz.jpg

Я уверен, что существует множество приложений на основе Windows (бесплатное ПО), которые могут переименовывать несколько файлов одновременно. Я просто пытаюсь улучшить свои знания в команде DOS.

Я знаю, что это действительно ужасно - но может ли кто-то указать мне в правильном направлении здесь?

@ echo 
cd\ 
c: 
cd temp 
ren "%[1-9]%_MyVacation%_x.jpg" ???? 
+1

Если вы можете, попробуйте вместо этого :) PowerShell намного проще и более мощный. – Ashigore

+0

Существует простой способ использования символов '_' в качестве разделителей - если вы действительно хотите переименовать формат файлов примеров, как указано: включая такие, как:' C: \ Temp \ 187645327321778_My Отпуск с моей собакой, пятно 6_x.jpg' – foxidrive

ответ

2

Вот один из способов сделать это.

@echo off 
cd /d c:\temp 
for /f "delims=" %%F in ('dir /b /a-d^|findstr /rx "[0-9]*_MyVacation[0-9]*_x\.jpg") do (
    for /f "delims=_ tokens=2" %A in ("%%F") do ren "%%F" "%%A_bz.jpg" 
) 
+0

Ах, я думал об использовании подстроки для извлечения и замены, но второй 'for/f 'delims = _" 'делает работу намного проще и является более элегантным способом (если что-то может быть элегантно в пакетных сценариях). –

+0

Извините, дБемэм, но это не сработало. – user2849978

+0

OK - тот же запрос, но с другим шаблоном файла: C: \ Temp \ 874540_MyVacation1_bob_x.JPG C: \ Temp \ 451157_MyVacation2_cindy_x.jpg C: \ Temp \ 874211_MyVacation3_Terri_x.jpg C: \ Temp \ 652120_MyVacation4_Noel_x.jpg переименован в: C: \ Temp \ MyVacation1_bob_bz.jpg C: \ Temp \ MyVacation2_cindy_bz.jpg C: \ Temp \ MyVacation3_Terri_bz.jpg C: \ Temp \ MyVacation4_Noel_bz.jpg – user2849978

0

решение с sed for Windows:

cd /d C:\TEMP 
dir /b *.jpg|sed -nr "s/^[0-9]+_([[:alnum:]_]+)x.jpg/ren \"^&\" \"\1bz.jpg\"/ie" 

..output Например:

 
C:\Temp>DIR /B *.JPG 
451157_MyVacation2_cindy_x.jpg 
451157_MyVacation2_x.jpg 
874211_MyVacation3_Terri_x.jpg 
874211_MyVacation3_x.jpg 
874540_MyVacation1_bob_x.jpg 
874540_MyVacation1_x.jpg 

C:\Temp>dir /b *.jpg|sed -nr "s/^[0-9]+_([[:alnum:]_]+)x.jpg/ren \"^&\" \"\1bz.jpg\"/ie" 

C:\Temp>DIR /B *.JPG 
MyVacation1_bob_bz.jpg 
MyVacation1_bz.jpg 
MyVacation2_bz.jpg 
MyVacation2_cindy_bz.jpg 
MyVacation3_bz.jpg 
MyVacation3_Terri_bz.jpg 

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