Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] ошибка слишком длинный путь или имя файла

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

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


Дано:
поиск файлов по маске и во вложенных папках
Код: Выделить весь код
$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: слишком длинный путь или имя файла

Отправлено: 13:44, 03-04-2015

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Как вариант использовать robocopy , функция - http://www.powershellmagazine.com/20...ps-and-tricks/

Отправлено: 13:48, 03-04-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


при этом 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

Отправлено: 13:57, 03-04-2015 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Отрабатывает по причине использования более меньшего пути. Подключайте диск P и используйте в PowerShell.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:59, 03-04-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата firstarey:
как обойти ошибку »
Лучший вариант — найти и «ручками» сократить длинные пути и имена файлов. Конкретный ответ, в виде:
Цитата Kazun:
Как вариант использовать robocopy , функция - http://www.powershellmagazine.com/20...ps-and-tricks/ »
, пользования коротких имён, net use, subst и пр. — будет зависеть от конечных целей.

Отправлено: 14:01, 03-04-2015 | #5


Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Цитата Iska:
net use »
а он в таком же виде в power shell переехал ?

Отправлено: 14:05, 03-04-2015 | #6


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата firstarey:
а он в таком же виде в power shell переехал ? »
А что ему будет?
Подключите диск и путь будет короче:
Код: Выделить весь код
new-psdrive -name z -psprovider 'filesystem' -root '\\serv\Otdely\ZUR'
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:39, 03-04-2015 | #7


Ветеран


Сообщения: 547
Благодарности: 36

Профиль | Сайт | Отправить PM | Цитировать


robocopy...
да уж, как забудешь использовать ключ /ХJ
так потом не оберешься проблем с копированием appdata )

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 14:42, 03-04-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата firstarey:
1. узнать количество определенных файлов и их размер ( ну например *.bak или любой другой)
2. удалить файлы по маске »
В первом случае можно просто использовать короткие имена. Во втором — нет.

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

Цитата firstarey:
а он в таком же виде в power shell переехал ? »
«net.exe» — это обычная утилита командной строки. В PowerShell может использоваться так же, как и любая другая утилита.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:03, 03-04-2015 | #9


Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
$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 "закончили упражнения"

скриншот


Цитата Foreigner:
Подключите диск »
вот еще бы указали сразу как отключить.
я конечно понимаю что это не сложно найти, но тому кто не знает значительно проще будет увидеть все в одном сообщении не ползая в справку.

Отправлено: 09:34, 06-04-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] ошибка слишком длинный путь или имя файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Инвентаризация компьютеров (По данным из AD, из файла, или просто указав имя компа) dark-------13 Скриптовые языки администрирования Windows 1 28-04-2015 15:34
Разное - Слишком длинный целевой путь menro Microsoft Windows 7 18 23-02-2013 14:48
Разное - Путь содержит слишком много уровней вложенности withsouth Microsoft Windows 2000/XP 13 16-01-2012 12:53
Разное - [решено] Слишком длинный целевой путь. Как отключить? Limpin Microsoft Windows Vista 3 27-05-2009 17:21
При доступе по сети возникает ошибка - Неверное сетевое имя или пароль Infinity7 Microsoft Windows NT/2000/2003 8 29-09-2005 12:10




 
Переход