Для цикла в пакете для выполнения чего-либо на фактическом пути и во всех подпапках - PullRequest
0 голосов
/ 19 марта 2019

Мне нужно отправить несколько команд (del, сжатие файлов и т. Д.) В папке и ее подпапках.

Я использую цикл for, и теперь я могу отправлять все команды во всех подкаталогах, но не по фактическому пути.

В следующем, что я делаю (циклы в подпапке, enternig в них, извлечение расширения файлов с именем my-file.*) и затем выполнение нескольких операций внутри каждой подпапки (....),

for /f "delims=" %%a in ('dir /s /b /o:n /ad') do (
REM "delims=" to deal with path containing spaces
cd /d "%%a"
for %%i in (my-file.*) do set EXTENSION=%%~xi
....
)

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

вместо ('dir /s /b /o:n /ad') используйте ('cd ^& dir /s /b /o:n /ad')

1 голос
/ 19 марта 2019

Я бы предложил использовать цикл for /F с командой dir /S, которая просматривает все подпапки:

@echo off
setlocal EnableDelayedExpansion

for /F "delims= eol=" %%A IN ('dir /S /B /A-D "my-file.*"') do (
    pushed "%%~dpA"
    rem do random stuff here
    popd
)

Обратите внимание, что вам не нужно устанавливать переменную как расширение, вы можете получить к нему доступ с помощью %%~xA немедленно.

Я включил отложенное расширение, так как вы можете установить переменную внутри цикла for, поэтому вам нужно получить к ней доступ с помощью !var!, а не %var%.

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

Вы также можете использовать forfiles, как в следующем примере:

forfiles /s /M my_file.* /C "cmd /c echo @file:@path,@fname.@ext"

"my_file.log":"C:\tralala\my_file.log","my_file"."log"
"my_file.txt":"C:\tralala\my_file.txt","my_file"."txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...