<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=17178</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17178&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt».]]></description>
		<lastBuildDate>Thu, 16 Jun 2022 07:12:10 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153568#p153568</link>
			<description><![CDATA[<p><strong>andypetr</strong><br />Проверил. Работает!!!! Большое Вам спасибо!!!!!</p>]]></description>
			<author><![CDATA[null@example.com (123ksn)]]></author>
			<pubDate>Thu, 16 Jun 2022 07:12:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153568#p153568</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153554#p153554</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (andypetr)]]></author>
			<pubDate>Wed, 15 Jun 2022 09:47:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153554#p153554</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153552#p153552</link>
			<description><![CDATA[<p><strong>andypetr</strong><br />Извините меня пожалуйста. Оказывается РС у меня было на русском языке. Поэтому не сработало. Теперь файлы сохраняет как и хотел. Чуть позже проверю с логику с датами.<br />Я видимо наглею, но нельзя ли сделать вариант контроля не по дате, а по размеру. Я подумал, что нет смысла перезаписывать старый файл новым, из которого удалили часть информации. <br />В любом случае Вам огромное спасибо за работающий вариант и за обучение, как увидеть лог работы батника.</p>]]></description>
			<author><![CDATA[null@example.com (123ksn)]]></author>
			<pubDate>Wed, 15 Jun 2022 07:59:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153552#p153552</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153551#p153551</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (andypetr)]]></author>
			<pubDate>Wed, 15 Jun 2022 06:43:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153551#p153551</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153550#p153550</link>
			<description><![CDATA[<p><strong>andypetr</strong><br />Большое спасибо. Проверил. Не работает. Добавил pause. Проскакивает черный экран, но файлы не появляются.</p>]]></description>
			<author><![CDATA[null@example.com (123ksn)]]></author>
			<pubDate>Wed, 15 Jun 2022 05:23:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153550#p153550</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153549#p153549</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (andypetr)]]></author>
			<pubDate>Wed, 15 Jun 2022 03:39:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153549#p153549</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Скопировать файлы (*w.txt) из папки (s\f\3*) =3хх-хw.txt]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=153544#p153544</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (123ksn)]]></author>
			<pubDate>Tue, 14 Jun 2022 14:53:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=153544#p153544</guid>
		</item>
	</channel>
</rss>
