CMD/BAT - Удаление символов в файлах
-
baddaboo
CMD/BAT - Удаление символов в файлах
Добрый день.
Необходимо удалить 33 символа в папке в файлах, которые не старее 1 дня.
Подскажите, пожалуйста, батник
Необходимо удалить 33 символа в папке в файлах, которые не старее 1 дня.
Подскажите, пожалуйста, батник
-
baddaboo
Re: CMD/BAT - Удаление символов в файлах
*скептически* просто 33 рандомных символа?
нужны подробности о файле (а лучше пример файла), о расположении в нем удаляемых символов, о расположении файлов относительно папок в которых они находятся и аргументация о невозможности использования powershell.
нужны подробности о файле (а лучше пример файла), о расположении в нем удаляемых символов, о расположении файлов относительно папок в которых они находятся и аргументация о невозможности использования powershell.
-
megaloman
Re: CMD/BAT - Удаление символов в файлах
baddaboo, в содержимом файлов или в имени? Если в содержимом, то какая кодировка файла? Лучше предоставьте живой пример - прикрепите один файл к сообщению, заархивируйте, если большой.
-
alpap
Re: CMD/BAT - Удаление символов в файлах
Цитата Elven:
о расположении файлов относительно папок
это на самом деле очень важно, т.к. удаляя из файлов: "Name33символа", "Name33символа", ...
как выше, 33 символа, мы рискуем получить одинаковые имена и тут или невозможность выполнения операции или затирание файла.
о расположении файлов относительно папок
CMD/BAT - Удаление символов в файлах
это на самом деле очень важно, т.к. удаляя из файлов: "Name33символа", "Name33символа", ...
как выше, 33 символа, мы рискуем получить одинаковые имена и тут или невозможность выполнения операции или затирание файла.
-
baddaboo
Re: CMD/BAT - Удаление символов в файлах
Извиняюсь, упустил этот момент в вопросе. В названии файла.
Структура названия:
Имябазы33символа.bak
Нужно, чтобы осталось Имябазы.bak
Градация по времени делается для того, что в этой папке есть другие старые бекапы и чтобы их имя не затерлось. Новые бекапы будут забираться каждый день и удаляться, поэтому задваивание исключено.
Структура названия:
Имябазы33символа.bak
Нужно, чтобы осталось Имябазы.bak
Градация по времени делается для того, что в этой папке есть другие старые бекапы и чтобы их имя не затерлось. Новые бекапы будут забираться каждый день и удаляться, поэтому задваивание исключено.
-
megaloman
Re: CMD/BAT - Удаление символов в файлах
Цитата baddaboo:
которые не старее 1 дня.
Можно ли это понимать как за сегодняшнюю дату?
Имябазы33символа.bak Что такое Имябазы, сколько там символов?
Нельзя ли переместить файл после переименования в другую папку, чтобы при повторном запуске батника на отрезать 33 символа от уже урезанного имени?
которые не старее 1 дня.
CMD/BAT - Удаление символов в файлах
Можно ли это понимать как за сегодняшнюю дату?
Имябазы33символа.bak Что такое Имябазы, сколько там символов?
Нельзя ли переместить файл после переименования в другую папку, чтобы при повторном запуске батника на отрезать 33 символа от уже урезанного имени?
-
Elven
Re: CMD/BAT - Удаление символов в файлах
С датой работать в 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
Re: CMD/BAT - Удаление символов в файлах
Цитата baddaboo:
в файлах, которые не старее 1 дня
Если имеется ввиду сегодняшняя дата, то
Код:
BoxIn и BoxOut могут совпадать.
в файлах, которые не старее 1 дня
CMD/BAT - Удаление символов в файлах
Если имеется ввиду сегодняшняя дата, то
Код:
Код: Выделить всё
@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 /BBoxIn и BoxOut могут совпадать.
-
megaloman
Re: CMD/BAT - Удаление символов в файлах
Цитата baddaboo:
в файлах, которые не старее 1 дня.
Если за сегодня и вчера, то
Код:
Можно изменить давность дат файла, изменяя параметр dayFile
в файлах, которые не старее 1 дня.
CMD/BAT - Удаление символов в файлах
Если за сегодня и вчера, то
Код:
Код: Выделить всё
@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