Показать полную графическую версию : Bat - добавить дату к имени
Здравствуйте.
Есть папка, в которую падают .txt файлы в течении дня.
В этой папке лежат файлы с разными именами, пример:
12345.txt
inv01.txt
prihod.txt
02-04-21 prihod 01.txt
02-04-21 invst.txt
_02-04-21 invst02.txt
Нужно сделать так, что бы bat-ник при запуске, добавлял ко всем файлам в начале текущую дату в формате ДД-ММ-ГГ и не трогал файлы у которых уже есть дата.
т.е. добавить даты только к этим файлам:
12345.txt
inv01.txt
prihod.txt
DJ Mogarych
02-04-2021, 23:28
Powershell
$t = get-date -Format dd-MM-yy
dir "C:\temp\test\*.txt" |? name -notmatch "\d{2}-\d{2}-\d{2}" |% {Rename-Item "$($_.FullName)" -NewName "$t $_"}
samr, первое — дату лучше представлять не в виде ДД-ММ-ГГ, а в виде ГГГГ-ММ-ДД. Вы не возражаете?
Второе: из представленных файлов и Вашего описания можно сделать вывод, что Ваше описание страдает неточностью, поскольку у файла:
_02-04-21 invst02.txt »
нет даты в начале имени (а есть символ «_»). Поясните.
megaloman
03-04-2021, 09:10
Как заказано. Считаю, что "_02-04-21 invst02.txt" - это неточность постановки, не переименовываю файлы "дд-мм-гг *.*"
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"
Set "Now=%Now:~6,2%-%Now:~4,2%-%Now:~2,2%"
Pushd "%BoxIn%" && (
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^[0-3][0-9]-[0-1][0-9]-[2-3][0-9] .*"`) Do (
Ren "%%f" "%Now% %%f"
)
Popd
)
pause
Exit /B
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"
Set "Now=%Now:~0,4%-%Now:~4,2%-%Now:~6,2%"
Pushd "%BoxIn%" && (
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^20[2-3][0-9]-[0-1][0-9]-[0-3][0-9] .*"`) Do (
Ren "%%f" "%Now% %%f"
)
Popd
)
pause
Exit /B
Но, даже если согласиться с Iska, постановка задачи далеко не идеальна, результат такой работы - громадное количество файлов в одной папке. @Echo Off
cls
Set "BoxIn=Z:\Box_In"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"
Set "NowM=%Now:~0,4%-%Now:~4,2%"
Set "Now=%Now:~0,4%-%Now:~4,2%-%Now:~6,2%"
Pushd "%BoxIn%" && (
If Not Exist "%NowM%\" Md "%NowM%"
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D ^| findstr.exe /R /V /C:"^20[2-3][0-9]-[0-1][0-9]-[0-3][0-9] .*"`) Do (
Ren "%%f" "%Now% %%f"
)
>nul 2>nul Move /Y "%Now% *.*" "%NowM%\"
Popd
)
pause
Exit /B
для каждого месяца отдельную папку»
а я не раз это тоже говорил что от организации своей работы будет зависеть сложность подобных кодов и свободное время
в данном случае вообще должны быть отдельные директории: "Prixod", "investic", ... внутри папки с месяцами, а файлы должны приходить с четкими именами под эти папки и месяцем и укладываться по назначению и добиться этого надо начиная с себя и выше или ниже по цепочке.
samr, первое — дату лучше представлять не в виде ДД-ММ-ГГ, а в виде ГГГГ-ММ-ДД. Вы не возражаете? »
не возражаю.
нет даты в начале имени (а есть символ «_»). Поясните. »
да, такой знак присутствует «_» - т.е. дату файлу присвоил, но потом пометил его, что к нему я еще вернусь (обработка данных внутри файла не закончена)
Все файлы в такой папке(сетевой) копятся, обрабатываются и хранятся максимум 2 дня. После раскидываются по разным папкам (это уже другая задача и она решена).
megaloman
05-04-2021, 13:56
samr, дату лучше представлять ... в виде ГГГГ-ММ-ДД. Вы не возражаете? »не возражаю. » да, такой знак присутствует «_» »То есть, не обрабатывать файлы вида:
"ГГГГ-ММ-ДД *.*" и "_ГГГГ-ММ-ДД *.*"
Для этого надо изменить рег. выражение в findstr под For:findstr.exe /R /V /C:"^_*20[2-3][0-9]-[0-1][0-9]-[0-3][0-9] .*"Примечание: файлы вида "______ГГГГ-ММ-ДД *.*" (количество "_" произвольно) тоже обрабатываться не будут.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.