Переименовать файл с датой файла в CMD
Я думаю, что откусил намного больше, чем могу прожевать.
Я Судебный репортер, работаю в судебной системе Миннесоты. Мы разработали новую политику для подачи наших электронных заметок, так как многие журналисты больше не печатают на бумаге заметки. Различные бренды отчетных машин создают файлы с различными соглашениями об именах, и мы хотим стандартизировать имена, чтобы кто-то в районной администрации мог легко найти правильные заметки, если мы не вокруг.
поэтому мы хотим переименовать файл.001, файл.002, и 20151018-082815.sgstn, например, на дату создания файла. Файл sgstn, конечно, имеет уникальное имя, но вездесущие авторы, которые создают файл.* файлы действительно нуждаются в переименовании, и стандартизация поможет всем. Я создаю файл CMD, который также будет опрашивать имя судьи и бренд писателя, поэтому любой, кто вытащит заметки из хранилища, найдет именно то, что они ищут: "2015-10-18 судья Джонс, Писатель Stentura.001"
Я нашел множество решений для переименования файлов с сегодняшней датой и временем, но мы хотим переименовать их с их собственной датой и временем.
Я работаю стандартным Пользователем в Windows 7 Pro и не имею возможности устанавливать стороннее программное обеспечение. Windows позволяет отдельным пользователям устанавливать предпочтительный стиль даты, а dbenham и другие здесь показали мне, как получить этот стиль из реестра:
:: For REG.EXE 3.0 (Windows XP) and later versions
FOR /F "tokens=3" %%A IN (
'REG QUERY "HKCUControl PanelInternational" /v sShortDate'
) DO (SET sShortDate=%%A)
Echo %sShortDate%
что вернется гггг-ММ-ДД или Д-М-гг или что бы ни выбрал пользователь.
и затем я могу проверить, чтобы увидеть, что содержимое разных частей строки:
for /f "tokens=1,2,3 delims=/-" %%A in ("%sShortDate%") do (
for /f "tokens=1" %%D in ("%%A") do (
set Part1=%%D
)
for /f "tokens=1" %%D in ("%%B") do (
set Part2=%%D
)
for /f "tokens=1" %%D in ("%%C") do (
set Part3=%%D
)
)
echo Part1 = %Part1%
echo Part2 = %Part2%
echo Part3 = %Part3%
но все это становится действительно громоздким, и я только на полпути туда после твердых 24 часов чтения здесь и в другом месте. Действительно ли в Windows, в командной строке CMD или в любом инструменте командной строки невозможно получить дату файла в предсказуемом формате и использовать эту дату?
может кто-нибудь сжалиться надо мной и дать нам менее громоздкие средства выяснить, что конкретная система пользователя думает, что дата должна быть отформатирована как и, таким образом, последовательно переименовывать все файлы, которые попадают на ярлык CMD?
наконец, это мой первый пост здесь. Все конструктивная критика с радостью принимается. Серьезно.
-- Тимоти Дж Макгоуэн
изменить добавить: Возможно, я слишком много об этом думаю. Это пользователя Улья в реестре я опросом формат даты. Мы должны иметь возможность писать в наш собственный улей из командной строки, верно?
чтобы я мог прочитать предпочтительный формат даты пользователя, сохранить его в переменной, принудительно использовать формат даты, обработать файлы, а затем сбросить формат даты пользователя. Правильно? Стоит выстрел.
Я сообщу, если это сработает, но любые комментарии приветствуются!
2 ответов
первая мысль :
используйте разделители, чтобы получить дату файла или имя или расширение
@echo off
setlocal enabledelayedexpansion
for %%a in (*.*) do (
set "$FileName=%%~na"
set "$FileExtension=%%~xa"
set "$FileDate=%%~ta"
set "$FileDate=!$FileDate:/=-!"
echo !$FileDate!-!$FileName!!$FileExtension!)
РЕДАКТИРОВАТЬ I
чтобы получить дату в гггг-ММ-ДД:
@echo off
setlocal enabledelayedexpansion
for %%a in (*.*) do (
set "$FileName=%%~na"
set "$FileExtension=%%~xa"
set "$FileDate=%%~ta"
set "$FileDate=!$FileDate:/=-!"
set "$FileDate=!$FileDate:~6,4!-!$FileDate:~3,2!-!$FileDate:~0,2!"
echo !$FileDate!-!$FileName!!$FileExtension!)
возможно, это не полный ответ на вопрос, который я задал, но он должен быть все, что мне нужно, чтобы получить предсказуемую дату.
можно сохранить предпочтительный стиль даты пользователя из реестра, заставить его работать, вести свой бизнес, а затем вернуть предпочтительный стиль даты пользователя (при условии, что они не отменяют пакетный файл в середине выполнения).
выход грязный, но он просто доказывает, что концепция работает.
@echo off
:: replace and then restore date style in Windows registry.
:: find current date style; save to environment variable OriginalsShortDate
FOR /F "tokens=3" %%A IN (
'REG QUERY "HKCU\Control Panel\International" /v sShortDate'
) DO SET OriginalsShortDate=%%A
:: display current date style as reflected by date of this CMD/BAT file
echo Current date style to be saved: %OriginalsShortDate%
echo Looks like this:
dir %0
echo Press any key to set yyyy-MM-dd date style
pause
:: force preferred date style and hide success message
reg add "HKCU\Control Panel\International" /v sShortDate /d yyyy-MM-dd /f >nul
:: prove it's changed
:: //////////// here's where you do your business \\\\\\
echo Check file's date now.
dir %0
echo (Your Windows task bar may not reflect change immediately.)
echo.
echo Press any key to set MM-dd-yy date style
pause
:: force next style
reg add "HKCU\Control Panel\International" /v sShortDate /d MM-dd-yy /f >nul
:: prove it's changed
echo Check file's date now; it will be in MM-dd-yy format.
dir %0
echo Press any key to return date format to your preferred style.
pause
:: return to user's original setting
reg add "HKCU\Control Panel\International" /v sShortDate /d %OriginalsShortDate% /f >nul
:: prove it's back to normal
dir %0
echo Your original, presumably preferred, date style has been reset.
echo Give your Windows task bar some time to update.