CMD/BAT - Удаление символов в файлах

Ответить
Аватара пользователя
baddaboo

CMD/BAT - Удаление символов в файлах

Сообщение baddaboo »

Добрый день.

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

Подскажите, пожалуйста, батник
Аватара пользователя
baddaboo

Re: CMD/BAT - Удаление символов в файлах

Сообщение baddaboo »

*скептически* просто 33 рандомных символа?

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

Re: CMD/BAT - Удаление символов в файлах

Сообщение megaloman »

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

Re: CMD/BAT - Удаление символов в файлах

Сообщение alpap »

Цитата Elven:



о расположении файлов относительно папок
CMD/BAT - Удаление символов в файлах




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

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

Re: CMD/BAT - Удаление символов в файлах

Сообщение baddaboo »

Извиняюсь, упустил этот момент в вопросе. В названии файла.

Структура названия:

Имябазы33символа.bak

Нужно, чтобы осталось Имябазы.bak

Градация по времени делается для того, что в этой папке есть другие старые бекапы и чтобы их имя не затерлось. Новые бекапы будут забираться каждый день и удаляться, поэтому задваивание исключено.
Аватара пользователя
megaloman

Re: CMD/BAT - Удаление символов в файлах

Сообщение megaloman »

Цитата baddaboo:



которые не старее 1 дня.
CMD/BAT - Удаление символов в файлах




Можно ли это понимать как за сегодняшнюю дату?

Имябазы33символа.bak Что такое Имябазы, сколько там символов?

Нельзя ли переместить файл после переименования в другую папку, чтобы при повторном запуске батника на отрезать 33 символа от уже урезанного имени?
Аватара пользователя
Elven

Re: CMD/BAT - Удаление символов в файлах

Сообщение Elven »

С датой работать в 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 - Удаление символов в файлах

Сообщение megaloman »

Цитата baddaboo:



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

BoxIn и BoxOut могут совпадать.
Аватара пользователя
megaloman

Re: CMD/BAT - Удаление символов в файлах

Сообщение megaloman »

Цитата baddaboo:



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

Вернуться в «Скриптовые языки администрирования Windows»