Экранирующие пробелы CMD и исключение имен, содержащих определенную строку

Код такой, но сейчас он работает не так, как ожидалось:

@ECHO OFF
for /f %%i in ('dir *.mov /b') do call :test %%i
goto continue
  :test
  if "%1"= = "*compressed.mov" goto :eof
  echo "%~f1"
  goto :eof
:continue
pause

Здесь я хотел бы решить две проблемы:

  1. Как избежать пробелов в именах файлов? т.е. Я хотел бы включить файл "video 1.mov" для теста, а не только "Диск:\путь\видео", а вместо этого "Диск:\путь\видео 1.mov"

  2. Как не повторять любой файл, содержащий строку «сжатый» в конце его имени?

for /f "delims = " %%i in ('dir *.mov /b^|findstr /i /e /v /L /c:"compressed.mov"') do call :test %%i
Magoo 23.01.2023 22:14

@Magoo, это решает вторую проблему :)

Rayearth 23.01.2023 22:36
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
0
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, что-то вроде этого подойдет:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For %%G In ("*.mov") Do If /I "%%~xG" == ".mov" (Set "_=%%~nG"
    SetLocal EnableDelayedExpansion
    If /I Not "!_:~-10!" == "compressed" (EndLocal & Echo "%%~fG"
    ) Else EndLocal
)
Pause

В качестве альтернативы используйте findstr.exe:

@For /F "EOL=? Delims = " %%G In ('Dir "*.mov" /A:-D /B 2^>NUL ^| %SystemRoot%\System32\findstr.exe /LIE ".mov" ^| %SystemRoot%\System32\findstr.exe /VLIE "compressed.mov"') Do @Echo "%__CD__%%%G"
@Pause

Другие вопросы по теме