Показать полную графическую версию : Удаление символов в файлах
baddaboo
26-04-2021, 11:41
Добрый день.
Необходимо удалить 33 символа в папке в файлах, которые не старее 1 дня.
Подскажите, пожалуйста, батник
*скептически* просто 33 рандомных символа?
нужны подробности о файле (а лучше пример файла), о расположении в нем удаляемых символов, о расположении файлов относительно папок в которых они находятся и аргументация о невозможности использования powershell.
megaloman
26-04-2021, 13:55
baddaboo, в содержимом файлов или в имени? Если в содержимом, то какая кодировка файла? Лучше предоставьте живой пример - прикрепите один файл к сообщению, заархивируйте, если большой.
о расположении файлов относительно папок »
это на самом деле очень важно, т.к. удаляя из файлов: "Name33символа", "Name33символа", ...
как выше, 33 символа, мы рискуем получить одинаковые имена и тут или невозможность выполнения операции или затирание файла.
baddaboo
26-04-2021, 16:09
Извиняюсь, упустил этот момент в вопросе. В названии файла.
Структура названия:
Имябазы33символа.bak
Нужно, чтобы осталось Имябазы.bak
Градация по времени делается для того, что в этой папке есть другие старые бекапы и чтобы их имя не затерлось. Новые бекапы будут забираться каждый день и удаляться, поэтому задваивание исключено.
megaloman
26-04-2021, 16:31
которые не старее 1 дня. »Можно ли это понимать как за сегодняшнюю дату?
Имябазы33символа.bak Что такое Имябазы, сколько там символов?
Нельзя ли переместить файл после переименования в другую папку, чтобы при повторном запуске батника на отрезать 33 символа от уже урезанного имени?
С датой работать в cmd чистый гемор, и, т.к. аргументов против поша я не увидел - вот:
Get-ChildItem ./*.bak | where {$_.LastWriteTime -gt (Get-Date).AddDays(-1)} | foreach {
$NewName = ($_.BaseName -replace ".{33}$") + $_.Extension
if (!(Test-Path $NewName -PathType Leaf)) {
Rename-Item $_ $NewName
} else {
Write-Host "Ты же говорил что имена повторяться не будут! А это что такое?"
Write-Host $NewName
Write-Host "Вот сам теперь переименовывай :/"
}
}
megaloman
27-04-2021, 16:17
в файлах, которые не старее 1 дня » Если имеется ввиду сегодняшняя дата, то@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_In\-33"
Set Mask="*.*"
If Not Exist "%BoxOut%" Md "%BoxOut%
Pushd "%BoxIn%" && (FOR /F "usebackq delims=" %%f IN (`2^>nul Dir %Mask% /B /A:-D`) DO (
Set "Name=%%~nf"
FOR /F "delims= " %%t IN ("%%~tf") DO (
If %Date%==%%t >nul Call Move "%%f" "%BoxOut%\%%Name:~0,-33%%%%~xf"
))
Popd)
pause
Exit /B
BoxIn и BoxOut могут совпадать.
megaloman
28-04-2021, 16:08
в файлах, которые не старее 1 дня. »Если за сегодня и вчера, то@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_In\-33"
Set /A dayFile=-2
Set Mask="*.*"
If Not Exist "%BoxOut%" Md "%BoxOut%"
Pushd "%BoxIn%" && (FOR /F "usebackq delims=" %%f IN (`2^>nul Dir %Mask% /B /O:-D /T:W /A:-D`) DO (
2>nul >nul FORFILES /P "Z:\Box_In" /M "%%f" /D %dayFile% &&GoTo :End
Set "Name=%%~nf"
Call Move "%%f" "%BoxOut%\%%Name:~0,-33%%%%~xf"
)
Popd)
:End
pause
Exit /B
Можно изменить давность дат файла, изменяя параметр dayFile
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.