Рабочий код:

Рабочий код:

Я пытаюсь найти способ заставить пакетный скрипт перезаписывать каждый экземпляр файла с ненулевым размером внутри определенного каталога и его подпапок. Я предполагаю, что поскольку я ищу ненулевой файл, я, вероятно, мог бы зациклить его с помощью escape, если он не найдет ни одного файла с ненулевым размером?

Пример: перезаписать все экземпляры example.txt, где размер файла не равен нулю:

D:\
\---SubFolder1
    |   example.txt <10 bytes>
    |
    \---Subfolder2
        |   example.txt <0 bytes>
        |
        \---Subsubfolder1
                example.txt <20 bytes>

В этом примере D:\Subfolder1\example.txt и D:\Subfolder2\Subsubfolder1\example.txt будут перезаписаны, но D:\Subfolder2\example.txt не будет изменен.

Спасибо @NiKiZe за всю твою помощь!

Рабочий код:

@ЭХО ВЫКЛ

УСТАНОВИТЬ DPATH=%~dp0

ДЛЯ /R "%DPATH%" %%F В (*** СМ. НИЖЕ) ДЕЛАЙТЕ ЕСЛИ %%~zFГТР НЭК0 ВЫЗОВ :NonEmptyFile "%%~F"
ПЕРЕЙТИ К :EOF

:NonEmptyFile
ECHO Получен непустой файл: %1
ВЫЗОВ : EOF

*** Замените именем файла, который вы хотите заменить, обязательно используйте где-нибудь подстановочный знак из одного символа (я использовал его в расширении — например, если я ищу example.txt, я заменил * на example.t?t)

решение1

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

@ECHO OFF

SET DPATH=%~dp0

FOR /R "%DPATH%" %%F IN (*) DO IF %%~zF GTR 0 CALL :NonEmptyFile "%%~F"
GOTO :EOF

:NonEmptyFile
  ECHO Got non empty file: %1
CALL :EOF

При использовании %~1функции она будет расширена, и вы можете использовать что-то вроде COPY /Y "somefile.txt" "%~1" Не указано, как именно вы хотите перезаписать файлы.

Другой вариант создания «пустых файлов» —ECHO. > "%~1"

Объяснение:

  • FOR /R "%DPATH%" %%F IN (*) DOпросматривает каждый файл
  • IF %%~zF GTR 0если размер файла больше ...
  • CALL :NonEmptyFile "%%~F"Вызовите :NonEmptyFileметку с экранированным именем файла

Чтобы проверить это в командной строке, используйтеFOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"

Более подробную информацию о том, как forэто работает, можно получить, for /?запустивcmd

Связанный контент