having an infinite loop with a wait inside is not a good approach. Roblox has events for almost anything and you should use them.
Also a while loop is more appropriate here because in your case if the length is already less than 0.3 on the first iteration it will still call wait() once.
local shorter = script.Parent
shorter.WinchTarget = 5
shorter.WinchEnabled = true
while shorter.Length - shorter.WinchTarget > 0.3 do
shorter:GetPropertyChangedSignal("Length"):Wait()
end
print("eyr")
shorter.WinchTarget = 240