Войти

Показать полную графическую версию : Удаление символов в файлах


baddaboo
26-04-2021, 11:41
Добрый день.
Необходимо удалить 33 символа в папке в файлах, которые не старее 1 дня.
Подскажите, пожалуйста, батник

Elven
26-04-2021, 13:25
*скептически* просто 33 рандомных символа?
нужны подробности о файле (а лучше пример файла), о расположении в нем удаляемых символов, о расположении файлов относительно папок в которых они находятся и аргументация о невозможности использования powershell.

megaloman
26-04-2021, 13:55
baddaboo, в содержимом файлов или в имени? Если в содержимом, то какая кодировка файла? Лучше предоставьте живой пример - прикрепите один файл к сообщению, заархивируйте, если большой.

alpap
26-04-2021, 15:46
о расположении файлов относительно папок »
это на самом деле очень важно, т.к. удаляя из файлов: "Name33символа", "Name33символа", ...
как выше, 33 символа, мы рискуем получить одинаковые имена и тут или невозможность выполнения операции или затирание файла.

baddaboo
26-04-2021, 16:09
Извиняюсь, упустил этот момент в вопросе. В названии файла.
Структура названия:
Имябазы33символа.bak
Нужно, чтобы осталось Имябазы.bak
Градация по времени делается для того, что в этой папке есть другие старые бекапы и чтобы их имя не затерлось. Новые бекапы будут забираться каждый день и удаляться, поэтому задваивание исключено.

megaloman
26-04-2021, 16:31
которые не старее 1 дня. »Можно ли это понимать как за сегодняшнюю дату?
Имябазы33символа.bak Что такое Имябазы, сколько там символов?
Нельзя ли переместить файл после переименования в другую папку, чтобы при повторном запуске батника на отрезать 33 символа от уже урезанного имени?

Elven
27-04-2021, 14:15
С датой работать в 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