
У меня есть папка с файлами, где названия файлов — даты. Мне нужно изменить названия файлов с mm-dd-yyyy.eXtension
на yyyy-mm-dd.eXtension
.
Вот что у меня сейчас есть:
03-31-2019.txt
03-31-2020.txt
03-31-2021.txt
03-31-2022.txt
Вот что требуется:
2019-03-31.txt
2020-03-31.txt
2021-03-31.txt
2022-03-31.txt
Я понимаю ren
функцию, но не уверен, как массово переименовать их все в отдельные имена, которые происходят от исходного имени. Я поискал и нашел больше помощи с простой ren
функцией, но ничего, чтобы просто переупорядочить имя.
Ниже приведены некоторые моменты, которые, как я обнаружил, помогли мне ren
и дали дополнительные идеи, но все равно это не то, что мне нужно.
Как переименовать файлы в командной строке Windows cmd?
Пакетная программа для переименования файла, в имени которого есть пробелы?
решение1
Для этого было бы проще использовать стороннее программное обеспечение с графическим интерфейсом.
Продукт типа «швейцарский нож», который вы можете использовать, является бесплатным Утилита массового переименования который может выполнять практически все операции любого типа.
Вот это на ваших данных с использованием регулярных выражений:
решение2
Вы можете использовать строковую манипуляцию переменной и определить макет имени в соответствии с желаемой перегруппировкой подстрок:
1.echo.Date : %date%
2.echo.Weekday: %date:~0,3%
3.echo.Month : %date:~4,2%
4.echo.Day : %date:~7,2%
5.echo.Year : %date:~10,4%
@echo off
for %%i in (??-*.txt)do set "_n=%%~ni" && =;(
%ComSpec% /v /c "ren "%%~i" !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi" );=
- Чтобы обойти разные файлы, а не только/исключительно в
.txt
eXtension, и в случае запуска в той же папке, игнорируя применение к.bat
самому себе, не используйте"-"
в имени bat и попробуйте этот цикл:
@echo off
for /f delims^= %%i in ('dir /a:a /b *-*.*')do set "_n=%%~ni" && =;(
%ComSpec% /v /c "ren "%%~i" !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi" );=
Для изолированного тестового предложения можно создать папку и запустить этот bat в этой папке, где можно будет создавать файлы для тестирования в одноименном макете и контролировать/визуализировать использование манипуляций с использованием подстрок:
@echo off
:: Deleting/creating files for testing ::
cd /d "%~dp0" && 2>nul del /q /a .\*.txt
for %%i in (19,20,21,22)do cd.>03-31-20%%~i.txt
for /f delims^= %%i in ('dir /a:a /b *-*.*')do set "_n=%%~ni" & echo\ && =;(
%ComSpec% /v /c "echo\// Original file name.eXtension = !_n!%%~xi"
%ComSpec% /v /c "ren "%%~i" !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi"
%ComSpec% /v /c "echo\variable index from 6 get 4 places == !_n:~6,4!"
%ComSpec% /v /c "echo\variable index from 0 get 2 places == !_n:~0,2!"
%ComSpec% /v /c "echo\variable index from 2 get 3 places == !_n:~2,3!"
%ComSpec% /v /c "echo\and put back original file eXtension == %%~xi"
%ComSpec% /v /c "echo\// File renamed to: !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi" );=
- Выходы:
// Original file name.eXtension = 03-31-2019.txt
variable index from 6 get 4 places == 2019
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2019-03-31.txt
// Original file name.eXtension = 03-31-2020.txt
variable index from 6 get 4 places == 2020
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2020-03-31.txt
// Original file name.eXtension = 03-31-2021.txt
variable index from 6 get 4 places == 2021
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2021-03-31.txt
// Original file name.eXtension = 03-31-2022.txt
variable index from 6 get 4 places == 2022
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2022-03-31.txt