<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6588&amp;type=atom" />
	<updated>2011-12-28T05:26:26Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6588</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55052#p55052" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>А указание WshShell.CurrentDirectory на WshShell.Exec влияние не оказывает?</p></blockquote></div><p>Оказывает <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />С WshShell.CurrentDirectory = &quot;D:\&quot; отлично работает. Спасибо за подсказку.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-28T05:26:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55052#p55052</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55051#p55051" />
			<content type="html"><![CDATA[<p>А указание WshShell.CurrentDirectory на WshShell.Exec влияние не оказывает?</p><p>P.S. Разработчика уже лет семь пинают на эту тему, но увы…</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-28T05:15:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55051#p55051</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55047#p55047" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Почему?</p></blockquote></div><p>Потому что 7z при отсутствии имени диска в списке файлов, 7z начинает искать файлы относительно места расположения скрипта. Через oShell.ShellExecute можно задать рабочую папку, через WshShell.Exec я такого способа не знаю(хотя это не значит что его нет). Пробовал заменить имя &quot;D:\&quot; на &quot;..\..\..\&quot;(такая у меня глубина расположения скрипта) - 7z опять пытается скинуть файлы в архив скопом. Поэтому или скрипт ложить в корень диска(я предпочитаю хранить скрипты структурированно) или использовать ShellExecute. Или пробывать связаться с разработчиком и пытаться протолкнуть новый ключ запуска <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><p>P.S. кому интересно - <a href="http://www.thesysadminhimself.com/2010/12/7-zip-compress-full-paths-from.html">7-zip compress full paths from directory listing</a>(реализация архивирования 7z со списка с полными путями на cmd)</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-28T04:24:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55047#p55047</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55028#p55028" />
			<content type="html"><![CDATA[<p><strong>BeS Yara</strong>, спасибо, ясно.</p><div class="quotebox"><blockquote><p>Правда запускать из скрипта уже придётся так…</p></blockquote></div><p>Почему?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-27T15:31:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55028#p55028</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55025#p55025" />
			<content type="html"><![CDATA[<p>Сходил на sourceforge, на страницу проекта. Сохранение пути просят давно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Есть много тикетов в &quot;запрос фичи&quot;, есть в форумах.<br />Пока максимум что можно использовать описано в этом топике - <a href="https://sourceforge.net/projects/sevenzip/forums/forum/45797/topic/3739029">Store Full Paths?</a>. Если кратко - некоторое подобие функционала имеется(ниже опишу), однако на добавления ключа с полноценным функционалом пока автора не уговорили. Причина - расхождение в желаниях. Одни хотят полный путь хранить в архиве(начиная с &quot;D:\&quot;), другие согласны на исключение диска или замены диск на одноимённую папку. Однако воз и ныне там(скачал бету 9.22).<br />Суть недоделанного функционала в следующем. Допустим список файлов такой(сократил для краткости):<br /></p><div class="quotebox"><blockquote><p>D:\!pre_backup2\Shared_JSC2\week 45\Серийники.xls<br />D:\!pre_backup2\Shared_JSC2\week 46\20081124103559632.doc</p></blockquote></div><p>Убираем диск:<br /></p><div class="quotebox"><blockquote><p>!pre_backup2\Shared_JSC2\week 45\Серийники.xls<br />!pre_backup2\Shared_JSC2\week 46\20081124103559632.doc</p></blockquote></div><p>Запускаем создание архива <strong>из корня диска</strong>:<br />D:\&gt;7z.exe a -t7z &quot;D:\!2Burn\20111227.7z&quot; @&quot;D:\TEMP\archList.txt&quot; -r- -up1q0r2x1y2z1w2&nbsp; -scsWIN<br />Результат:<br /></p><div class="quotebox"><blockquote><p>Listing archive: D:\!2Burn\20111227.7z</p><p>--<br />Path = D:\!2Burn\20111227.7z<br />Type = 7z<br />Method = LZMA<br />Solid = +<br />Blocks = 1<br />Physical Size = 4413373<br />Headers Size = 265</p><p>&nbsp; &nbsp;Date&nbsp; &nbsp; &nbsp; Time&nbsp; &nbsp; Attr&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Size&nbsp; &nbsp;Compressed&nbsp; Name<br />------------------- ----- ------------ ------------&nbsp; ------------------------<br />2008-11-24 14:52:48 ....A&nbsp; &nbsp; &nbsp; 9749551&nbsp; &nbsp; &nbsp; 4413108&nbsp; !pre_backup2\Shared_JSC2\week 46\20081124103559632.doc<br />2008-11-19 17:30:42 ....A&nbsp; &nbsp; &nbsp; &nbsp;104960&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;!pre_backup2\Shared_JSC2\week 45\Серийники.xls<br />------------------- ----- ------------ ------------&nbsp; ------------------------<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9854511&nbsp; &nbsp; &nbsp; 4413108&nbsp; 2 files, 0 folders</p></blockquote></div><p>Правда запускать из скрипта уже придётся так:<br /></p><div class="codebox"><pre><code>Dim oShell
Set oShell = CreateObject(&quot;Shell.Application&quot;)
oShell.ShellExecute &quot;7z.exe&quot;, &quot;a -t7z &quot;&quot;&quot; &amp; ArchName &amp; &quot;&quot;&quot; @&quot;&quot;&quot; &amp; ListFile &amp; &quot;&quot;&quot;&quot; &amp; ZipAttribs &amp; &quot; -scsWIN&quot;, &quot;D:\&quot;, &quot;&quot;, 1</code></pre></div><p>Из минусов - код выхода кажется при таком запуске от 7z.exe не получить(если не путаю), и соответственно не обработать(жирный минус).<br />То что выше описано относится к &quot;недокументированным&quot; возможностям(в документации об этом упоминаний не видел). Хотя 7z сам не обновляется, но мне стрёмно такие вещи использовать <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-27T14:21:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55025#p55025</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55022#p55022" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Опробуете — отпишитесь, пожалуйста.</p></blockquote></div><p>Работает всё кроме самого главного <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /><br />При работе по списку 7z пытается скинуть все файлы в архив без учёта путей. Пытается - потому что в разных папках есть файлы с одинаковым именем, в результате:<br /></p><div class="quotebox"><blockquote><p>Error:<br />Duplicate filename:</p></blockquote></div><p>Боюсь что пока соответствующий функционал не появится в архиваторе, красивая идея бэкапа через список сформированный логпарсером останется только идеей. Конечно создание структуры каталогов есть в WinRAR-е(структура начинается с корня исходного размещения файла), но он платный. Не свой же ключ на серваке использовать(да и нарушением лицензии это наверно будет). Правда установленная у меня версия 4.01 не работала с длинными путями, но после установки свежескачанной версии 4.00 стала работать <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Ещё проблема(думаю баг) - 7z по дефолту использует UTF-8 файл-листы, однако(судя по возникающей ошибке) не понимает &quot;что там за хрень&quot; в начале файла - волшебные биты ему не нравятся:<br /></p><div class="quotebox"><blockquote><p>WARNINGS for files:</p><p>&amp;#9829;d : Синтаксическая ошибка в имени файла, имени папки или метке тома.</p></blockquote></div><p>Это лечится ключём -sсsWIN и сохранением файл-листа в ASCII.</p><p>В остальном всё замечательно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><p>Впрочем, если кому-то пригодится, вот &quot;болванка&quot;(практически без защиты от дурака - вроде слэшей в конце пути, существования папок и файлов, и т.д.):<br /></p><div class="codebox"><pre><code>&#039; VB Script Document
Option Explicit

Dim SVNzip, OutPathZip
SVNzip = &quot;C:\Program Files\7-Zip\7z.exe&quot;
OutPathZip = &quot;D:\!2Burn&quot;

Dim WshShell, fso, ListFile, ts
Set WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;)
Set fso = WScript.Createobject(&quot;Scripting.FileSystemObject&quot;)
ListFile = &quot;D:\TEMP\archList.txt&quot;
Set ts = fso.CreateTextFile(ListFile, True, False)

Dim oLogQuery, oInputFormat, strQuery, oRecordSet, oRecord
Set oLogQuery = WScript.CreateObject(&quot;MSUtil.LogQuery&quot;)
Set oInputFormat = WScript.CreateObject(&quot;MSUtil.LogQuery.FileSystemInputFormat&quot;)
strQuery = &quot;select Path &quot; &amp; _
            &quot;from &#039;d:\!pre_backup2\*.*&#039; &quot; &amp; _
            &quot;where &quot; &amp; _
            &quot;EXTRACT_EXTENSION(Path) in (&#039;doc&#039;; &#039;docx&#039;; &#039;docm&#039;; &#039;xls&#039;; &#039;xlk&#039;; &#039;xlsx&#039;; &#039;xlsm&#039;; &#039;mdb&#039;; &#039;adp&#039;; &#039;rtf&#039;; &#039;vbs&#039;; &#039;pdf&#039;) &quot; &amp; _
            &quot;and &quot; &amp; _
            &quot;SUBSTR (EXTRACT_FILENAME (Path),0,1) Not In (&#039;~&#039;)&quot;
Set oRecordSet = oLogQuery.Execute(strQuery, oInputFormat)

Do While Not oRecordSet.atEnd
	Set oRecord = oRecordSet.getRecord
  ts.WriteLine(oRecord.getValue(0))
	oRecordSet.moveNext
Loop
oRecordSet.close
ts.Close

Dim ArchName, ZipAttribs, ExecSrting, oExec
ArchName = OutPathZip &amp; &quot;\&quot; &amp; LongDate(now) &amp; &quot;.7z&quot;
ZipAttribs = &quot; -r- -up1q0r2x1y2z1w2 &quot;
ExecSrting = &quot;&quot;&quot;&quot; &amp; SVNzip &amp; &quot;&quot;&quot;&quot; &amp; &quot; a -t7z &quot;&quot;&quot; &amp; ArchName &amp; &quot;&quot;&quot; @&quot;&quot;&quot; &amp; ListFile &amp; &quot;&quot;&quot;&quot; &amp; ZipAttribs &amp; &quot; -scsWIN&quot;
WScript.Echo ExecSrting
Set oExec = WshShell.Exec(ExecSrting)
Do While oExec.Status = 0
  WScript.Sleep 100
Loop
Select Case oExec.ExitCode
  Case 0
    wscript.echo &quot;All Done&quot;
  Case 1
    wscript.echo &quot;Warning (Non fatal error(s)).&quot;
  Case 2
    wscript.echo &quot;Fatal error&quot;
  Case 7
    wscript.echo &quot;Command line error&quot;
  Case 8
    wscript.echo &quot;Not enough memory for operation&quot;
  Case 256
    wscript.echo &quot;User stopped the process&quot;
End Select
&#039;##############################################################################
&#039; Возвращает дату(без времени) вида YYYYMMDD
Function LongDate(Data)
  Dim DD, MM, YYYY
  DD = CStr(Day(Data))
  MM = CStr(Month(Data))
  YYYY = CStr(Year(Data))
  If Len(DD) = 1 then DD = &quot;0&quot; &amp; DD
  If Len(MM) = 1 then MM = &quot;0&quot; &amp; MM
  LongDate = YYYY &amp; MM &amp; DD
End Function</code></pre></div><p>В папку OutPathZip создаётся архив с именем YYYYMMDD.7z. Исходная папка и фильтры - в SQL-запросе, ListFile - расположение файл-листа.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-27T12:29:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55022#p55022</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55014#p55014" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>В целом работает, но в хэлпе наткнулся на это:…</p></blockquote></div><p>Да, сие, конечно, хреново: запятая и круглые скобки не редкость в именах файлов (сам я, правда, предпочитаю квадратные — «[]»). Но, с другой стороны — речь ведь идёт только об предикате «FROM» — тут ведь легко заранее озаботиться тем, чтобы ни запятых, ни скобок в пути не было.</p><div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>а при большом объёме изменяемых файлов вариант с логпарсером может дать экономию места, т.к. нет нужды в промежуточном копировании(надо будет протестировать как 7z с путями поступает при работе со списком файлов).</p></blockquote></div><p>Опробуете — отпишитесь, пожалуйста.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-27T09:15:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55014#p55014</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55002#p55002" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Может сгодится: <a href="http://www.project84.net/?p=36">Finding Path lengths greater than MAX_PATH</a>.</p></blockquote></div><p>Поизучаю - иногда приходится на дотнете писать для своих нужд, работа с длинными путями может пригодиться.</p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Речь про то, что с помощью LogParser можно сделать отбор по дате (если он действительно работает с длинными путями) и построить список файлов, который затем передать посредством текстового файла 7-zip&#039;у</p></blockquote></div><p>В целом работает, но в хэлпе наткнулся на это:<br /></p><div class="quotebox"><cite>Reference-&gt;Query Syntax-&gt;FROM пишет:</cite><blockquote><p>From-entities that represent names of files or directories are not allowed to contain the following characters, even when enclosed in quote characters or entered using the \uxxxx notation: <br />tab carriage-return line-feed , ( ) &quot; &lt; &gt;</p></blockquote></div><p>Если мой английский меня не подводит, то это значит что в поле FROM ссылающемся на путь(-i:FS) символ запятой недопустим в любом виде. <br />Будучи упёртым и недоверчивым попробовал все известные мне способы: <strong>\,</strong>, <strong>^,</strong>, <strong>\u002C</strong>, <strong>%,</strong>, <strong>[,]</strong>. Даже задваивать запятую пробовал <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> - уже как разделитель не бьётся, но ругается на то что путь инвалид(в пути двойная запятая - конечно инвалид). Хэлп не соврал <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />Правда если путь в поле FROM без запятой, то работает - в результат выборки пути с запятой попадают. Так что вариант приемлимый с учётом этого ограничения.</p><div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>forfiles не пойдет ? Или так же не справится ?</p></blockquote></div><p>@path\@file - получить путь и имя для длинного пути получается. Правда оба параметра в своей паре кавычек, но это вопрос второй. А первый - что с этим делать дальше <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. COPY сполна пользуется ограничением MAX_PATH. Если просто строить список файлов, то мне LogParser больше по душе(наверно за SQL-подобный синтаксис).</p><p>Так как объём дневных изменений невелик, наверно пока остановлюсь на robocopy, а при большом объёме изменяемых файлов вариант с логпарсером может дать экономию места, т.к. нет нужды в промежуточном копировании(надо будет протестировать как 7z с путями поступает при работе со списком файлов).</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-27T06:53:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55002#p55002</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54997#p54997" />
			<content type="html"><![CDATA[<p>forfiles не пойдет ? Или так же не справится ?</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2011-12-27T05:18:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54997#p54997</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54995#p54995" />
			<content type="html"><![CDATA[<p>Может сгодится: <a href="http://www.project84.net/?p=36">Finding Path lengths greater than MAX_PATH</a>.</p><p>Речь про то, что с помощью LogParser можно сделать отбор по дате (если он действительно работает с длинными путями) и построить список файлов, который затем передать посредством текстового файла 7-zip&#039;у:<br /></p><div class="quotebox"><blockquote><p>4. 7z(версии 9.20) шутя справляется с обработкой длинных путей(как упаковка, так и распаковка). Но, к сожалению, при добавлении файлов в архив нет фильтра по дате последнего изменения(или я не нашел).</p></blockquote></div><p>То есть, что-то наподобие:<br /></p><div class="codebox"><pre><code>&quot;C:\Program Files\Log Parser 2.2\LogParser.exe&quot; &quot;SELECT Path FROM &quot;E:\Песочница\0099\*.*&quot;, &quot;E:\Песочница\0100\*.*&quot;, &quot;E:\Песочница\0101\*.*&quot; WHERE LastWriteTime &gt;= TO_LOCALTIME(SUB(SYSTEM_TIMESTAMP(), TIMESTAMP(&#039;0000-01-02&#039;, &#039;yyyy-MM-dd&#039;))) AND Attributes NOT LIKE &#039;D________&#039;&quot; -i:FS -q:ON -oCodepage:65001 -recurse:0 1&gt;Out.txt</code></pre></div><p>(или аналогичный запрос на WSH).</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-27T03:34:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54995#p54995</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54977#p54977" />
			<content type="html"><![CDATA[<p>Волей случая выяснил что есть утилита нормально работающая с длинными путями - robocopy.exe(даже 5 раз упоминалась на форуме <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />). У меня - из Windows 2003 Resource Kit, а так &quot;Включена в поставку Windows Vista, Windows Server 2008&quot;((с) википедия).&nbsp; </p><p>С более ранними версиями могут быть проблемы на длинных путях:<br /></p><div class="quotebox"><cite>robocopy.doc пишет:</cite><blockquote><p>Copy very long path names (longer that 256 characters).<br />Previous versions of Robocopy would fail to copy any pathname longer than 256 characters. The program has now been enhanced to handle pathnames of any length, up to the internal Windows limit of nearlt 32,000 characters.</p></blockquote></div><p>Забавно - поддержку длинных путей можно отключить(зачем?!) если запускать с ключём <strong>/256</strong>.<br />Документация к ней правда своеобразная, но разобраться можно. </p><p>Есть GUI(отдельно качать), пользы от которого ноль - всё равно назначения ключей в документации читать нужно.<br />P.S. Что примечательно, Майкрософт сообщил что есть у них новая утилита - RichCopy tool. Правда длинные пути не переварила, и с консоли похоже не работает <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />P.P.S. если всё-таки есть полноценный костыль для VBS для работы с длинными путями, то информация мне всё ещё интересна(хотя текущую задачу буду решать через robocopy - то что сейчас нужно он делать умеет).<br />_______________________________<br />Update: Ключи запуска с консоли у RichCopy tool всё-таки есть, а длинные пути похоже в задумках(тема о преодолении ограничения WinAPI MAX_PATH, судя по форумам, ну ооочень бородатая - почему не сделать наконец поддержку длинных путей, ума не приложу):<br /></p><div class="quotebox"><cite>TechNet Blogs, декабрь 2010 пишет:</cite><blockquote><p>Ken Tamaru (Microsoft) said &quot;Long path, reparse point, some missing command options, etc will be addressed in next release. It will be released in a couple of weeks.&quot;&nbsp; That was back in January 2010.&nbsp; A couple weeks has turned into the greater part of a year.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-26T13:49:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54977#p54977</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54952#p54952" />
			<content type="html"><![CDATA[<p>Покопал ещё немного. <br />1. Для папки ограничение на длину пути 248 символов(где-то на хабре наткнулся).<br />2. Попробовал создавать путь по частям - сначала то что влезает в ограничения, потом ShortPath созданного пути + следующая папка(в цикле). В результате могу создать путь с длиной больше 248 символов, но как только строка в fso.GetFolder(при получении короткого пути папки) выходит за ограничения, получаю &quot;путь не найден&quot;. Так что костыль слабоват <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" />.<br />3. В дотнете(3.5) System.IO.Directory.CreateDirectory и My.Computer.FileSystem.CreateDirectory(возможно что это две разные ссылки на один и тот же метод) при длинном пути вызывает соответствующее исключение(System.IO.PathTooLongException). С копированием даже не стал экспериментировать.<br />4. 7z(версии 9.20) шутя справляется с обработкой длинных путей(как упаковка, так и распаковка). Но, к сожалению, при добавлении файлов в архив нет фильтра по дате последнего изменения(или я не нашел).</p><p>Собственно причина изысканий - объём бэкапа стал такой, что два архива на болванку перестали помещаться. Хотел делать бэкап инкриментно. Сначала полный архив(с записью на болванку), потом каждый день скидывать на болванку изменившиеся документы. Для этого и нужно &quot;собирать&quot; по каталогам файлы не только по маске, но и по дате изменения.</p><p>Вариант использования административных мер(предупредить юзеров о необходимости не злоупотреблять вложенностью и длиной имени файлов) оставляю на последок. А пока буду ещё думать над разумными костылями для решения этой задачи. Надо посмотреть как там с длиной пути в php <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-25T09:52:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54952#p54952</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54934#p54934" />
			<content type="html"><![CDATA[<p>О костыле с использованием SUBST думал, но это укоротит путь максимум на 23 символа. В текущей ситуации это поможет. Но, учитывая ограничения на длину пути самой NTFS, это проблему не решит в целом - рано или поздно пользователь создаст ещё пару уровней с расширенным описанием содержания и снова всё упрётся в 260 символов пути.</p><p>А вот идея с короткими(8.3) именами на удивление сработала(<strong>Rom5</strong>, благодарю за идею) - сначала создал папку по полному пути, получил её в виде объекта. При копировании подставил короткий путь:</p><div class="codebox"><pre><code>NewFile = fldr.ShortPath &amp; &quot;\&quot; &amp; File.Name</code></pre></div><p>Файл нормально скопировался, полное имя с путём - 269 символов. Впрочем, радость моя была неполной - создать папку с путём длиннее 260(259) символов тоже не выходит. Сейчас самый длинный путь 209 символов, но нет никаких гарантий что он не станет длиннее. Создавать же целевой каталог изначально в виде 8.3 не подходит - это скрипт для бэкапа, нужно сохранить структуру полностью(начало названия папки может совпадать и в формате 8.3 придётся перебирать их поочереди, а название файла юзеры помнят всегда очень приблезительно).</p><p>Похоже придётся обратить свой взор в сторону дотнета... Надеюсь там этого ограничения уже нет <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-24T11:55:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54934#p54934</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54910#p54910" />
			<content type="html"><![CDATA[<p>В качестве &quot;костыля&quot; - если есть весомая по длине постоянная (для разных Ваших задач) начальная часть локального пути, то может имеет смысл ее первоначально &quot;виртуализировать&quot; на некую букву cmd-командой SUBST ? Или если этот путь сетевой - мапить его на букву. А если каталог пути назначения уже существующий - получать его короткое имя, которое 8+3 ...</p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2011-12-23T19:38:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54910#p54910</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: Copy&CopyFile vs MAX_PATH - можно обойти?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54871#p54871" />
			<content type="html"><![CDATA[<p>Добрый день.</p><p>Столкнулся с ситуацией - при копировании файла, если полное имя TargetFile больше определённой весьма конечной длины, возникает ошибка 76(Путь не найден). Причём ошибка возникает только при превышении длины для конечного файла(исходный файл может иметь полный путь и длиннее).<br />Поиск дал информацию об ограничении в WinAPI в 260 символов(259 видимых, если не ошибаюсь) - <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath">Maximum Path Length Limitation</a>. Есть рекомендация для длинного пути использовать в пути префикс &quot;\\?\&quot;, но похоже рекомендация к скриптам не относится, т.к. в скрипте не срабатывает(Ошибка выполнения Microsoft VBScript: Недопустимый вызов или аргумент процедуры). </p><p>Собственно вопрос - можно ли в vbscript обойти данное ограничение?</p><p>Подрезать конечный путь в некоторых пределах я могу, но проблему это не решит(научить пользователей лаконичности при создании структуры в общей папке, ИМХО,&nbsp; невозможно).</p><p>P.S. файловая система NTFS, OS - Windows Server 2003 SE R2 SP2.<br />P.P.S. попробовал консольные утилиты: xcopy -&nbsp; пишет &quot;Недостаточно памяти&quot;; проверил copy - &quot;Указано слишком длинное имя файла.&quot;. Решил вернуться к nnbackup - &quot;Имя файла или его расширение имеет слишком большую длину.&quot; Прям засада какая-то <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" />.</p><p>OFFTOP: есть-ли такое ограничение в .NET, или хотя бы там получится работать с длинными путями?</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2011-12-23T08:07:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54871#p54871</id>
		</entry>
</feed>
