Будет ли это возможно с командным файлом? - PullRequest
0 голосов
/ 07 июля 2019

Прежде чем я начну публиковать код, я задаюсь вопросом, возможно ли это вообще.

У меня есть каталог папок, который мне нужно переместить в новый каталог.Но мне нужно только переместить папки, которые содержат только 2 файла в них.В остальных папках содержится более 2 файлов, но они должны остаться.Так будет ли это возможно с командным файлом?

1 Ответ

0 голосов
/ 08 июля 2019

Это было интересно, поэтому я попробовал:

@echo off

set "dir=C:\Your\Current\Directory"
set "ndir=C:\Your\New\Directory"

setlocal enabledelayedexpansion
for /d %%A in (%dir%\*) do (
    pushd "%%A"
    for /f %%B in ('dir /a-d-s-h /b ^| find /v /c ""') do (
        set cnt=%%B
        if "!cnt!" == "2" (if not exist "%ndir%\%%~nA" robocopy "%%A" "%ndir%\%%~nA" /e)
    )
)

pause

Я продолжал сталкиваться с проблемами, поэтому я изменил несколько вещей, чтобы заставить его делать то, что я хотел;вероятно, есть более изящные способы сделать это, но это сработало ¯ \ _ (ツ) _ / ¯.Прежде всего, установите переменные для вашего текущего каталога (dir) и вашего нового каталога (ndir), чтобы потом было немного легче переваривать;нам также необходимо включить отложенное расширение, поскольку значение нашей счетной переменной (cnt) будет меняться между циклами цикла.Первый цикл FOR - это /d, который будет проходить по папкам - мы устанавливаем каждую из этих папок в качестве параметра %%A и используем его для изменения нашего каталога (используя pushd) до запуска наших вложенных команд.

Второй цикл FOR - это /f, который будет циклически перебирать результаты команд - в данном случае это dir и find.Для dir мы указываем /a, чтобы показать все файлы, которые -d не являются папками, -s системными файлами или -h скрытыми файлами, и мы выводим эти выходные данные в формате /b bare.Используя вывод dir, мы запускаем find и указываем /v отображать все непустые строки, а затем /c подсчитываем число - которое становится параметром %%B.

Наконец, мыустановите %%B в качестве нашей счетной переменной (cnt) - если !cnt! равно 2, мы увидим, существует ли папка в новом каталоге, и если она не будет выполнена, мы ее повторно скопируем.Команда перемещения доставляла мне некоторые неудобства, поскольку папка была бы заблокирована циклом, поэтому, если вы хотите, вы также можете добавить команду DEL, чтобы удалить исходную папку.

Дайте мне знать, если это поможет!Надеюсь, ваше исследование в любом случае прошло успешно.

Ссылки: Подсчет файлов , ДЛЯ Looping , pushd , DIR , НАЙТИ , Робокопия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...