PDA

Показать полную графическую версию : Обрезание файлов в командной строке


4zz
21-04-2012, 00:13
Уважаемые знатоки!
Помогите написать батник-проблема:
при переносе папки появляются ошибки о длинном имени файла. Папка многоуровневая, содержит много папок и файлов и каждый раз приходится искать "неправильный" файл(путь+имя больше 255символов), переименовывать, опять запускать копирование и т.д. А в связи с тем, что папок много -это настоящий геморрой.. :( Ничего подходящего, моим условиям на форуме не нашел :(

Может это из области фантастики :) , но хотелось бы так:
При запуске батника из папки, происходит сканирование всех имеющихся в ней файлов и всех вложенных папок и при нахождении файла не удовлетворяющих условию (более 255сим.) - появляется сообщение о длинном имени и предложение переименовать его здесь же - в командной сроке, для чего выводится путь и имя. После переименования, продолжается сканирование, начиная с переименованного файла и так до полного исправления ошибок. :)

Iska
21-04-2012, 01:15
4zz, можете использовать короткое имя папки.

4zz
21-04-2012, 09:22
Имена папок не длинные- но их много по вложенности и получается длинный путь.
Можно регулировать длиной имени файла-использовать сокращения и т.д., но для этого нужно понять что нужно менять и как-то автоматизировать -о чем я и пишу выше.

El Sanchez
21-04-2012, 12:45
4zz, используйте robocopy (http://ss64.com/nt/robocopy.html).

CyberMuesli
21-05-2012, 01:52
используйте robocopy. »


А эта утилита умеет преодолевать ограничение 256? Как? Есть какие-то штатные средства или она, например, на лету создает новые шары на источнике/приемнике на каждую копируемую папку, чтобы сократить путь

Petya V4sechkin
21-05-2012, 08:05
А эта утилита умеет преодолевать ограничение 256?
By default Robocopy will handle file and directory path names up to almost 32,000 characters in length.

Как? Есть какие-то штатные средства
На уровне API у CopyFileW (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851(v=vs.85).aspx) и у других аналогичных функций:

In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path.




© OSzone.net 2001-2012