PowerShell - [решено] ошибка слишком длинный путь или имя файла

Аватара пользователя
firstarey

PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение firstarey »

Дано:

поиск файлов по маске и во вложенных папках



Код:

Код: Выделить всё

$PathIn = "\\serv\Otdely\ZUR"
$MaskDel = "*.bak"
$FilesDel = Get-ChildItem $PathIn\* -recurse -Include $MaskDel
if ($FilesDel -ne $null) {
	Write-Host "нашлось"`t ($FilesDel.count)
	Write-Host "нашлось"`t ($FilesDel.Length / 1Mb) "Мб"
	Write-Host "нашлось"`t ($FilesDel.Length / 1Gb) "Гб"
	ForEach	($FileDelCurrent in $FilesDel) {
		$FileDelCurrent_count++
		Write-Host $FileDelCurrent_count ($FileDelCurrent.Length / 1Mb) `t  $FileDelCurrent.name
	}
}
read-host "закончили упражнения"

Вопрос:

как обойти ошибку



Код:

Код: Выделить всё

Get-ChildItem: слишком длинный путь или имя файла
Аватара пользователя
Iska

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Iska »

при этом bat вариант отрабатывает без ошибок:



Код:

Код: Выделить всё

@title [ERASE]
@echo off
Color 0e
rem  ********************************************************************************
rem  * скрипт удаления файлов по маске.                                             *
rem  ********************************************************************************
rem set PUT=\\serv\Otdely\ZUR\ПРОЕКТЫ\
rem откуда удаляем:
set PUT=\\serv\Otdely\ZUR\ЏђЋ…Љ’›
set DEL_LOG=\\serv\Otdely\ZUR\ЏђЋ…Љ’›\г¤*«Ґ*ЁҐ bak.txt
set end_error=0
echo ==[%date:~6,4%-%date:~3,2%-%date:~0,2%]==[%time%]==[%username%]=======[Начнем]====================== >>"%DEL_LOG%"
rem  подключим сетевой диск:
NET USE P: "%PUT%"
if  %errorlevel% NEQ 0 (
	set end_error=1
	set text_EE=не удалось подключить сетевой диск
	goto :end
)
echo Создаем сетевой диск:	OK >>"%DEL_LOG%"
chcp 1251>nul
rem  приступим к удалению:
Del /F /S /Q P:\*.bak >>"%DEL_LOG%"
chcp 866>nul
:end
NET USE P: /delete /y
if %end_error% EQU 0 echo ==[%date:~6,4%-%date:~3,2%-%date:~0,2%]==[%time%]==[%username%]=======[Выполнено]=================== >>"%DEL_LOG%"
if %end_error% EQU 1 echo ==[%date:~6,4%-%date:~3,2%-%date:~0,2%]==[%time%]==[%username%]=======[ОШИБКА: %text_EE%]== >>"%DEL_LOG%"
echo. >>"%DEL_LOG%"
ping -n 5 localhost>nul
exit
pause
Аватара пользователя
Kazun

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Kazun »

при этом bat вариант отрабатывает без ошибок:



Код:

Код: Выделить всё

@title [ERASE]
@echo off
Color 0e
rem  ********************************************************************************
rem  * скрипт удаления файлов по маске.                                             *
rem  ********************************************************************************
rem set PUT=\\serv\Otdely\ZUR\ПРОЕКТЫ\
rem откуда удаляем:
set PUT=\\serv\Otdely\ZUR\ЏђЋ…Љ’›
set DEL_LOG=\\serv\Otdely\ZUR\ЏђЋ…Љ’›\г¤*«Ґ*ЁҐ bak.txt
set end_error=0
echo ==[%date:~6,4%-%date:~3,2%-%date:~0,2%]==[%time%]==[%username%]=======[Начнем]====================== >>"%DEL_LOG%"
rem  подключим сетевой диск:
NET USE P: "%PUT%"
if  %errorlevel% NEQ 0 (
	set end_error=1
	set text_EE=не удалось подключить сетевой диск
	goto :end
)
echo Создаем сетевой диск:	OK >>"%DEL_LOG%"
chcp 1251>nul
rem  приступим к удалению:
Del /F /S /Q P:\*.bak >>"%DEL_LOG%"
chcp 866>nul
:end
NET USE P: /delete /y
if %end_error% EQU 0 echo ==[%date:~6,4%-%date:~3,2%-%date:~0,2%]==[%time%]==[%username%]=======[Выполнено]=================== >>"%DEL_LOG%"
if %end_error% EQU 1 echo ==[%date:~6,4%-%date:~3,2%-%date:~0,2%]==[%time%]==[%username%]=======[ОШИБКА: %text_EE%]== >>"%DEL_LOG%"
echo. >>"%DEL_LOG%"
ping -n 5 localhost>nul
exit
pause
Аватара пользователя
Kazun

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Kazun »

Цитата firstarey:



как обойти ошибку
PowerShell - [решено] ошибка слишком длинный путь или имя файла




Лучший вариант — найти и «ручками» сократить длинные пути и имена файлов. Конкретный ответ, в виде:


Цитата Kazun:



Как вариант использовать robocopy , функция -
http://www.powershellmagazine.com/20...ps-and-tricks/
PowerShell - [решено] ошибка слишком длинный путь или имя файла




, пользования коротких имён, net use, subst и пр. — будет зависеть от конечных целей.
Аватара пользователя
Iska

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Iska »

Цитата Iska:



будет зависеть от конечных целей.
PowerShell - [решено] ошибка слишком длинный путь или имя файла




цели простые:

1. узнать количество определенных файлов и их размер ( ну например *.bak или любой другой)

2. удалить файлы по маске




Цитата Iska:



net use
PowerShell - [решено] ошибка слишком длинный путь или имя файла




а он в таком же виде в power shell переехал ?
Аватара пользователя
firstarey

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение firstarey »

Цитата firstarey:



а он в таком же виде в power shell переехал ?
PowerShell - [решено] ошибка слишком длинный путь или имя файла




А что ему будет?

Подключите диск и путь будет короче:



Код:

Код: Выделить всё

new-psdrive -name z -psprovider 'filesystem' -root '\\serv\Otdely\ZUR'
Аватара пользователя
Foreigner

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Foreigner »

robocopy...

да уж, как забудешь использовать ключ /ХJ

так потом не оберешься проблем с копированием appdata )
Аватара пользователя
Опиум

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Опиум »

Цитата firstarey:



1. узнать количество определенных файлов и их размер ( ну например *.bak или любой другой)

2. удалить файлы по маске
PowerShell - [решено] ошибка слишком длинный путь или имя файла




В первом случае можно просто использовать короткие имена. Во втором — нет.



В любом случае разбираться с длинными путями лучше «ручками».




Цитата firstarey:



а он в таком же виде в power shell переехал ?
PowerShell - [решено] ошибка слишком длинный путь или имя файла




«net.exe» — это обычная утилита командной строки. В PowerShell может использоваться так же, как и любая другая утилита.
Аватара пользователя
Опиум

Re: PowerShell - [решено] ошибка слишком длинный путь или имя файла

Сообщение Опиум »

в общем вышел из ситуации, как и ранее в bat файле, через подключение сетевого диска.

если кому интересно - пользуйтесь:



код

[spoiler]Код:
[/spoiler]

Код: Выделить всё

$PathIn = "\\serv\Otdely\ZUR\ПРОЕКТЫ"
$MaskDel = "*.bak"
#########################################
Write-Host "работаем.."
$MinWork=((Measure-Command {
	NET USE P: "$PathIn"
	$FilesDel = Get-ChildItem P:\* -recurse -Include $MaskDel
	if ($FilesDel -ne $null) {
		Clear-Host
		ForEach	($FileDelCurrent in $FilesDel) {
			$FileDelCurrent_count++
			$Files_Length = $Files_Length + $($FileDelCurrent.Length / 1Mb)
			[string]$DocNum = $FileDelCurrent
			$DocNum = $DocNum.split("\")[2]
			$DocNum = $DocNum.split("_")[0]
			Switch (($(($FileDelCurrent.Length / 1Mb).tostring("F00"))).Length) {
				1 {$FileDelCurrent_Length = "00$(($FileDelCurrent.Length / 1Mb).tostring("F00"))"}
				2 {$FileDelCurrent_Length = "0$(($FileDelCurrent.Length / 1Mb).tostring("F00"))"}
				3 {$FileDelCurrent_Length = "$(($FileDelCurrent.Length / 1Mb).tostring("F00"))"}
			}
			Write-Host $FileDelCurrent_count`t$FileDelCurrent_Length "Мб"`t$DocNum`t$($FileDelCurrent.name)
		}
	}
	NET USE P: /delete /y
}).TotalMinutes.tostring("F00"))
Write-Host "-------------------------------------------------------------------------------"
Write-Host "работал  "$MinWork" мин, нашлось "($FilesDel.count)" файлов, размером "($Files_Length).tostring("F00")" Мб"
Write-Host "-------------------------------------------------------------------------------"
$WinTitle=(get-host).UI.RawUI
$WinTitle.WindowTitle="готово!"
read-host "закончили упражнения"









скриншот

[spoiler]
[/spoiler]







Цитата Foreigner:



Подключите диск
PowerShell - [решено] ошибка слишком длинный путь или имя файла




вот еще бы указали сразу как отключить.

я конечно понимаю что это не сложно найти, но тому кто не знает значительно проще будет увидеть все в одном сообщении не ползая в справку.
Ответить

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