Выполните действие с файлами в каталоге, если они не начинаются с определенной строки - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь написать программу, которая конвертирует фотографии. Он прекрасно работает при преобразовании всех фотографий, но, учитывая, что выходные данные начинаются с asd, я бы хотел, чтобы он пропускал файлы, начинающиеся с него. Вот пример кода для пояснения (для простоты используется echo в качестве моего процесса):

for %%A in (%2) do (
set fname="%%A"
    if not "%fname:~0,3%"=="asd" (
        echo input "%%A" now produce "asd_%%A"
    )
)

По сути, для массового преобразования я бы запустил его без частей set и if. Я бы запустил это как my_cmd --all *.png. Опять же, исключая эти две части, это работает нормально. Как только я включаю их, это действует (для меня) непредсказуемо. Если бы я мог избежать установки переменной fname для этого, это было бы здорово, но из того, что я читал в других постах, я не могу. В этой заметке я, вероятно, должен сделать эти переменные временными / локальными / удалить / и т.д. Как бы я это сделал? Я довольно новичок в партии, поэтому понятия не имею, даже когда смотрю онлайн.

1 Ответ

0 голосов
/ 17 сентября 2018

Несколько вещей не так с вашим кодом.

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

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

@echo off
setlocal enabledelayedexpansion
for %%A in (%2) do (
    set "fname=%%A"
    if not "!fname:~0,3!"=="asd" (
        echo input "%%A" now produce "asd_%%A"
    )
)

В качестве альтернативы вы можете использовать команду DIR для вывода списка файлов и передать его в команду FINDSTR для поиска файлов, которые не начинаются с вашей строки.

FOR /F "delims=" %%G IN ('dir /a-d /b *.png ^|findstr /I /B /V "asd"') do echo %%G
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...