<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17178&amp;type=atom" />
	<updated>2022-06-16T07:12:10Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=17178</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153568#p153568" />
			<content type="html"><![CDATA[<p><strong>andypetr</strong><br />Проверил. Работает!!!! Большое Вам спасибо!!!!!</p>]]></content>
			<author>
				<name><![CDATA[123ksn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=42593</uri>
			</author>
			<updated>2022-06-16T07:12:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153568#p153568</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153554#p153554" />
			<content type="html"><![CDATA[<p><strong>123ksn</strong><br />Не хотел усложнять, но тут потребуется команда &quot;<strong>SetLocal EnableDelayedExpansion</strong>&quot;, которая позволяет легко обращаться к значению переменной внутри блока кода, ограниченного скобками - через восклицательные знаки.<br />Я первой строкой всех своих BAT-файлов всегда пишу &quot;@echo off &amp; SetLocal EnableExtensions EnableDelayedExpansion&quot;, так проще кодировать.<br />В данном примере я обращаюсь к значению переменной &quot;doCopy&quot;: &quot;%doCopy%&quot; не раскрывает значение переменной, а вот &quot;!doCopy!&quot; всё делает как надо.<br />Аналогично, можно было бы написать &quot;for %%D in (&quot;<strong>!folder_where!</strong>%%~nxB-%%~nxC&quot;)&quot; - хотя тут и с процентами срабатывает.<br />В общем, я везде где можно раскрываю значения переменных через &quot;!&quot;.<br />За исключением переменных-параметров (%0, %*, %1, ..., %9), переменных циклов (%%a-%%z, %%A-%%Z) и переменных окружения (%PATH% и т.д.).</p><div class="codebox"><pre><code>@echo off &amp; SetLocal EnableExtensions EnableDelayedExpansion

set &quot;folder_where=%~dp0&quot;

for /d %%B in (%USERPROFILE%\AppData\Roaming\PC\3*) do (
  
  for %%C in (&quot;%%B\*.txt&quot;) do (

    for %%D in (&quot;%folder_where%%%~nxB-%%~nxC&quot;) do (

      rem Сравнение размеров файла-источника %%C и файла-приемника %%D:

      if exist &quot;%%~D&quot; (
        set /a doCopy = %%~zC - %%~zD
      ) else (
        set /a doCopy = 1
      )

      rem переменная doCopy:
      rem &gt; 0, если файл %%C больше по размеру, чем файл %%D (нужно копирование)
      rem = 1, если файл %%D не существует (нужно копирование)
      rem = 0, если файлы равны по размеру (нужно копирование с ключом /D)
      rem &lt; 0, если файл %%C меньше по размеру, чем файл %%D (не нужно копирование)

      if !doCopy! geq 1 (
        echo F|xcopy &quot;%%~C&quot; &quot;%%~D&quot;    /h /k /r /y &gt;NUL
      ) else (
      if !doCopy! equ 0 (
        echo F|xcopy &quot;%%~C&quot; &quot;%%~D&quot; /d /h /k /r /y &gt;NUL
      )
      )

      rem &quot;echo F|&quot; подавляет запрос на копирование новых файлов &quot;(F = файл, D = каталог)&quot;.
       
      rem Ключи XCOPY:
      rem /D:m-d-y Копирует файлы, измененные либо в указанный день, либо после.
      rem          Если дата не указана, копируются только те файлы, которые новее в исходной папке.
      rem /H Копирует скрытые и системные файлы.
      rem /R Заменяет файлы, доступные только для чтения.
      rem /K Копирует атрибуты. Простая команда Xcopy сбрасывает атрибут &quot;Только чтение&quot;.
      rem /Y Подавляет запрос на подтверждение перезаписи существующего конечного файла.
    
    )
  )

)

pause

EndLocal
exit /b
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2022-06-15T09:47:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153554#p153554</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153552#p153552" />
			<content type="html"><![CDATA[<p><strong>andypetr</strong><br />Извините меня пожалуйста. Оказывается РС у меня было на русском языке. Поэтому не сработало. Теперь файлы сохраняет как и хотел. Чуть позже проверю с логику с датами.<br />Я видимо наглею, но нельзя ли сделать вариант контроля не по дате, а по размеру. Я подумал, что нет смысла перезаписывать старый файл новым, из которого удалили часть информации. <br />В любом случае Вам огромное спасибо за работающий вариант и за обучение, как увидеть лог работы батника.</p>]]></content>
			<author>
				<name><![CDATA[123ksn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=42593</uri>
			</author>
			<updated>2022-06-15T07:59:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153552#p153552</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153551#p153551" />
			<content type="html"><![CDATA[<p><strong>123ksn</strong>, попробуйте добавить последней строкой PAUSE.<br />И в строке &quot;for %%C ... &gt;NUL&quot; заменить &quot;<strong>&gt;NUL</strong>&quot; на &quot;<strong>&gt;&gt;1.txt</strong>&quot;.<br />Что выводится на экран и в файл 1.txt?</p><p>PS. Точно ли у вас в папке <strong>%USERPROFILE%\AppData\Roaming</strong> содержится папка <strong>PC</strong> с папками, начинающимися на <strong>3*</strong>, в которых есть файлы <strong>.txt</strong>?<br />Я у себя всё это создал для тестирования - например, есть файл <strong>C:\USERS\ПОЛЬЗОВАТЕЛЬ\APPDATA\ROAMING\PC\321098765432\readme.txt</strong>.</p>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2022-06-15T06:43:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153551#p153551</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153550#p153550" />
			<content type="html"><![CDATA[<p><strong>andypetr</strong><br />Большое спасибо. Проверил. Не работает. Добавил pause. Проскакивает черный экран, но файлы не появляются.</p>]]></content>
			<author>
				<name><![CDATA[123ksn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=42593</uri>
			</author>
			<updated>2022-06-15T05:23:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153550#p153550</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153549#p153549" />
			<content type="html"><![CDATA[<p><strong>123ksn</strong>, приветствую.</p><p>Вот мой вариант.<br />Присваиваются новые имена, обновляются существующие файлы (ключ /D команды XCOPY).</p><div class="codebox"><pre><code>set &quot;folder_where=%~dp0&quot;

for /d %%B in (%USERPROFILE%\AppData\Roaming\PC\3*) do (
  
  for %%C in (&quot;%%B\*.txt&quot;) do echo F|xcopy &quot;%%C&quot; &quot;%folder_where%%%~nxB-%%~nxC&quot; /d /h /k /r /y &gt;NUL

  rem &quot;echo F|&quot; подавляет запрос на копирование новых файлов &quot;(F = файл, D = каталог)&quot;.
   
  rem Ключи XCOPY:
  rem /D:m-d-y Копирует файлы, измененные либо в указанный день, либо после.
  rem          Если дата не указана, копируются только те файлы, которые новее в исходной папке.
  rem /H Копирует скрытые и системные файлы.
  rem /R Заменяет файлы, доступные только для чтения.
  rem /K Копирует атрибуты. Простая команда Xcopy сбрасывает атрибут &quot;Только чтение&quot;.
  rem /Y Подавляет запрос на подтверждение перезаписи существующего конечного файла.

)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2022-06-15T03:39:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153549#p153549</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=153544#p153544" />
			<content type="html"><![CDATA[<p>Доброго времени суток!<br />Надо найти в определенных папках, заданных маской, определенные файлы, тоже заданные маской. <br />Найденные файлы скопировать в папку, откуда запущен bat-ник. Поскольку имена найденных файлов могут совпадать, то имена результирующих файлов должны состоять из имени папки, в которой они находились, и оригинального имени файла.<br />Вот код, который мне удалось написать. Он не делает из того, что мне надо только одно- не присваивает новые имена.<br />Помогите, пожалуйста.<br /></p><div class="codebox"><pre><code>
set folder_where=%~dp0
rem 
for /d %%B in (%USERPROFILE%\AppData\Roaming\PC\3*) do (
for %%C in (&quot;%%B\*.txt&quot;) do copy /y &quot;%%C&quot; &quot;%folder_where%&quot; &gt;NUL
)
pause
</code></pre></div><p>Из моего кода видно, что в каталоге %USERPROFILE%\AppData\Roaming\PC\ есть некие папки, названия которых начинаются с цифры 3 (три). Количество символов в имени папки (цифр), как правило, 12. В таких папках мне надо найти определенные файлы по маске *.txt. например: readme.txt. Такие файлы должны появиться в папке с батником под именем=имя папки+имя файла, например: 321098765432-readme.txt<br />И еще. Хотелось сделать проверку на наличие файла (321098765432-readme.txt). Если у записанного дата старее, чем у нового (readme.txt), то перезаписать, иначе не надо. <br />Заранее спасибо.</p>]]></content>
			<author>
				<name><![CDATA[123ksn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=42593</uri>
			</author>
			<updated>2022-06-14T14:53:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=153544#p153544</id>
		</entry>
</feed>
