Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление символов в файлах (http://forum.oszone.net/showthread.php?t=348628)

baddaboo 26-04-2021 11:41 2956417

Удаление символов в файлах
 
Добрый день.
Необходимо удалить 33 символа в папке в файлах, которые не старее 1 дня.
Подскажите, пожалуйста, батник

Elven 26-04-2021 13:25 2956425

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

megaloman 26-04-2021 13:55 2956428

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

alpap 26-04-2021 15:46 2956437

Цитата:

Цитата Elven
о расположении файлов относительно папок »

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

baddaboo 26-04-2021 16:09 2956443

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

megaloman 26-04-2021 16:31 2956448

Цитата:

Цитата baddaboo
которые не старее 1 дня. »

Можно ли это понимать как за сегодняшнюю дату?
Имябазы33символа.bak Что такое Имябазы, сколько там символов?
Нельзя ли переместить файл после переименования в другую папку, чтобы при повторном запуске батника на отрезать 33 символа от уже урезанного имени?

Elven 27-04-2021 14:15 2956501

С датой работать в 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 2956509

Цитата:

Цитата baddaboo
в файлах, которые не старее 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 2956585

Цитата:

Цитата baddaboo
в файлах, которые не старее 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


Время: 13:36.

Время: 13:36.
© OSzone.net 2001-