Открывайте несколько каталогов, не зная имен указанных каталогов, и удаляйте в них папки, используя пакетный файл Windows - PullRequest
0 голосов
/ 19 марта 2019

Хорошо, я действительно не знаю, как полностью описать то, что я хочу, и мне плохо, когда я спрашиваю что-то настолько продвинутое. Я не знаю, как сделать что-то кроме перемещения папок и удаления файлов и папок с помощью пакета.

Я пытаюсь создать командный файл для удаления определенных файлов и папок Steam, которые используются для кэширования данных. Я мог бы легко сделать это для себя и назвать это днем, однако я хотел бы поделиться этим и заставить это работать и для других людей. Проблема в том, что одна из папок кеша названа с уникальным идентификатором Steam. Я поставлю то, что я сделал так далеко внизу.

REM Makes a temporary folder.
mkdir %LocalAppData%\Temp\steam_cache

REM Deleted all none essential files in Steam's configuration folder.
move "%ProgramFiles(x86)%\Steam\config\config.vdf" %LocalAppData%\Temp\steam_cache
move "%ProgramFiles(x86)%\Steam\config\loginusers.vdf" %LocalAppData%\Temp\steam_cache
rmdir "%ProgramFiles(x86)%\Steam\config" /s /q
mkdir "%ProgramFiles(x86)%\Steam\config"
move %LocalAppData%\Temp\steam_cache\config.vdf "%ProgramFiles(x86)%\Steam\config"
move %LocalAppData%\Temp\steam_cache\loginusers.vdf "%ProgramFiles(x86)%\Steam\config"

REM Delete all none essential files in Steam's userdata folder.

Я опишу структуру файла следующим образом.

%ProgramFiles(x86)%\Steam\userdata\256283931

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

Я помещу ниже папки, которые я хотел бы удалить, которые находятся внутри случайной нумерованной папки ниже.

%ProgramFiles(x86)%\Steam\userdata\256283931\ugcmsgcache

Извините, если я слишком много спрашиваю, просто игнорируйте этот пост, спасибо.

1 Ответ

0 голосов
/ 20 марта 2019

То, что вы ищете, это for /D цикл , который перечисляет каталоги:

rem // Enumerate all directories under `userdata`:
for /D %%I in ("%ProgramFiles(x86)%\Steam\userdata\*") do (
    rem // Check if there is really a sub-directory called `ugcmsgcache`:
    if exist "%%~I\ugcmsgcache\" (
        rem // Do something with the full path, like echoing, for instance:
        echo "%%~I\ugcmsgcache"
    )
)

Если вы хотите убедиться, что имя нумерованного каталога / -из состоит только из десятичных цифр, вы можете использовать dir и findstr вместе с for /F петлей :

rem // Change into parent directory, because `dir /B` returns plain directory names:
cd /D "%ProgramFiles(x86)%\Steam\userdata"
rem // Enumerate all directories under `userdata`, whose names are pure numbers:
for /F "delims=" %%I in ('
    dir /B /A:D "*" ^| findstr /I /X "[0123456789]*"
') do (
    rem // Do something with the full path, like echoing, for instance:
    echo "%%~fI\ugcmsgcache"
)

Команда cd также может быть заменена на pushd и popd.

Модификатор ~f обеспечивает получение полного пути, связанного с текущим рабочим каталогом.

Обратите внимание, что труба (|) должна быть экранирована , потому что она находится в наборе петли for /F.

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