2017-02-15 2 views
0

Мне нужна рутина для переименования файлов в преобразованные имена файлов и удаления оригинала в заданной директории.

Он должен искать только начальную строку GL_AVG, GL_DEFAULT, GL_END, потому что после этого имя файла будет меняться ежедневно, поэтому не может быть жестко запрограммировано, (что я могу сделать).Как переименовать файл на основе имени исходного файла?

Оригинальные файлы:

GL_AVG_2017-02-15_08-54-56.txt 
GL_DEFAULT_2017-02-15_08-54-34.txt 
GL_END_2017-02-15_08-55-12.txt 

Конвертирована Для:

GL_AVG_Feb_2017.txt 
GL_DEFAULT_Feb_2017.txt 
GL_END_Feb_2017.txt 

До сих пор, у меня есть следующий код для синтаксического анализа год и filemonth, но возникают проблемы, пытаясь переименовать с помощью этих переменных.

For /F "eol=_ tokens=3 delims=_" %%a in ('dir /b *.txt') do set yy=%%~na 
For /F "eol=_ tokens=2 delims=-" %%a in ('dir /b *.txt') do set filemonth=%%~na 

if %filemonth% == "01" set mm=Dec 
if %filemonth% == "02" set mm=Jan 
if %filemonth% == "03" set mm=Feb 
if %filemonth% == "04" set mm=Mar 
if %filemonth% == "05" set mm=Apr 
if %filemonth% == "06" set mm=May 
if %filemonth% == "07" set mm=Jun 
if %filemonth% == "08" set mm=Jul 
if %filemonth% == "09" set mm=Aug 
if %filemonth% == "10" set mm=Sep 
if %filemonth% == "11" set mm=Oct 
if %filemonth% == "12" set mm=Nov 

set dd=%%c 

) 

Любая помощь будет оценена!

+1

Ваши утверждения IF никогда не будут правдой. Это сравнение строк. У вас есть цитаты с одной стороны сравнения, но не с другой. – Squashman

+0

Спасибо за улов. Любые идеи о переименовании? – user7571572

+1

Вы намеренно вычитаете месяц? – LotPings

ответ

0

Я хотел бы использовать функцию строк замены, которая выглядит как:

%VariableName:[OldText]=[NewText]% 

Или в вашем случае:

for /F "eol=_ tokens=2 delims=-" %%a in ('dir /b *.txt') do (
    call :RenameFile %%~na) 
exit /B 

:RenameFile [%1: Name of file to be renamed] 
    set Filename=%1 

    ::Look for "2017-01", change it to "2017_Jan" 
    ::Repeat for each possible month. 
    set Filename=%Filename:2017-01=2017_Jan% 
    set Filename=%Filename:2017-02=2017_Feb% 
    set Filename=%Filename:2017-03=2017_Mar% 
    set Filename=%Filename:2017-04=2017_Apr% 
    set Filename=%Filename:2017-05=2017_May% 
    set Filename=%Filename:2017-06=2017_Jun% 
    set Filename=%Filename:2017-07=2017_Jul% 
    set Filename=%Filename:2017-08=2017_Aug% 
    set Filename=%Filename:2017-09=2017_Sep% 
    set Filename=%Filename:2017-10=2017_Oct% 
    set Filename=%Filename:2017-11=2017_Nov% 
    set Filename=%Filename:2017-12=2017_Dec% 
    rename %1 %Filename% 
exit /B 

В качестве альтернативы, вы можете захотеть взглянуть на http://www.dostips.com/?t=Snippets.MapLookup

2
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion 
:: build a pseudo array with the month names 
Set M#=101 
For %%A in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
) do Set Month[!M#:~-2!]=%%A&Set /A M#+=1 
:: Rename 
For /f "tokens=1-4* delims=_-" %%A in (
    'Dir /B GL_*_20*_*.txt' 
) Do Echo Ren "%%A_%%B_%%C-%%D-%%E" "%%A_%%B_!Month[%%D]!_%%C.txt" 

Образец выходного сигнала

Ren "GL_AVG_2017-02-15_08-54-56.txt" "GL_AVG_Feb_2017.txt" 
Ren "GL_DEFAULT_2017-02-15_08-54-34.txt" "GL_DEFAULT_Feb_2017.txt" 
Ren "GL_END_2017-02-15_08-55-12.txt" "GL_END_Feb_2017.txt" 

Если выход выглядит нормально, удалите эхо в последней строке.

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