Рейтинг:0

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

флаг us

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

Например, перезапишите каждый экземпляр example.txt, если он имеет ненулевой размер файла:

Д:\
\---Подпапка1
    | пример.txt <10 байт>
    |
    \---Подпапка2
        | пример.txt <0 байт>
        |
        \---Подпапка1
                пример.txt <20 байт>

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

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

Рабочий код:

@ЭХО ВЫКЛ.

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

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

: непустой файл
ECHO Получен непустой файл: %1
ЗВОНИТЕ: EOF

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

флаг in
Это должно быть `cmd`? Вам придется делать циклы и рекурсивные вызовы, но внутренний `for` должен уметь это делать.
флаг in
Я ошибался в рекурсивных вызовах, по крайней мере, из того, что я понял из вопроса, но может быть и ошибаюсь? Может быть, следует проверять только «example.txt»?
wb6vpm avatar
флаг us
К сожалению, да, я хочу добавить это в существующий пакетный файл, где мне нужно заменить существующие файлы, которые были обновлены (ненулевой размер) исходным файлом размером 0 байт, и файл существует в нескольких подпапках, которые может измениться, поэтому я не могу просто жестко закодировать каждую возможную (под)папку, чтобы просто стереть и восстановить.
Рейтинг:1
флаг in

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

@ЭХО ВЫКЛ.

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

FOR /R "%DPATH%" %%F IN (*) DO IF %%~zF GTR 0 CALL :NonEmptyFile "%%~F"
ПЕРЕЙТИ: EOF

: непустой файл
  ECHO Получен непустой файл: %1
ЗВОНИТЕ: EOF

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

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

Объяснение:

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

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

Подробнее о том, как за работает за /? в команда

wb6vpm avatar
флаг us
Большое спасибо! Мне пришлось сделать несколько настроек, чтобы заставить его сотрудничать, но это дало мне очень хорошую отправную точку!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.