Как использовать nircmd.exe и установить имя файла% ~ nF в пакетном режиме для цикла

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

@echo off setlocal enabledelayedexpansion FOR /R dirpath %F in (*.*) DO (SET FNAME=%~nF SET MM=%FNAME:~0,2% SET DD=%FNAME:~2,2% SET YY=%FNAME:~4,2% nircmd.exe setfiletime %F "%DD% %MM%-20%YY% 00:00:00" "%DD%-%MM%-20%YY% 00:00:00") 

Я не уверен, как даже решить, что делает скрипт – пауза не приостанавливает программу после цикла. Как это можно переписать для работы?

  • Как использовать пакетный файл для рекурсивной замены строки в файлах?
  • Как использовать `%` в пакетном файле
  • Запуск командного файла при выходе из системы
  • Добавление дня недели к имени файла в пакетном файле
  • Сделайте что-нибудь каждые 10 секунд командного файла
  • Запись в файл с командой «find» в пакетном скрипте
  • Запуск командного файла при выходе из системы
  • Пакет рекурсивно удаляет старые файлы Windows
  • Добавление дня недели к имени файла в пакетном файле
  • Как использовать пакетный файл для рекурсивной замены строки в файлах?
  • Как использовать `%` в пакетном файле
  • Сделайте что-нибудь каждые 10 секунд командного файла
  • 2 Solutions collect form web for “Как использовать nircmd.exe и установить имя файла% ~ nF в пакетном режиме для цикла”

    Как это можно переписать для работы?

    У вас есть ряд проблем с вашим пакетным файлом:

    • Это не %f . Вместо этого вам нужно использовать %%f . %f – для командной строки, которая требует фиксации не менее 3-х мест.
    • Я бы поставил команды внутри do ( ... ) на отдельных строках.
    • Вы можете поставить паузу перед закрытием )
    • Вы можете прокомментировать первую строку с rem чтобы узнать, что делает командный файл.
    • Добавьте echo в строку полезной нагрузки с помощью nircmd .
    • Удалите echo если считаете, что он работает.
    • Вам нужно в некоторых местах использовать ! Вместо % внутри цикла for (это то, для чего enabledelayedexpansion использование расширенного расширения – это позволяет изменять переменные во время выполнения, а не во время разбора

    Начните со следующего командного файла (я исправил основные ошибки для вас):

     @echo off setlocal enabledelayedexpansion for /r dirpath %%F in (*.*) DO ( set FNAME=%%~nF SET MM=!FNAME:~0,2! SET DD=!FNAME:~2,2! SET YY=!FNAME:~4,2! echo nircmd.exe setfiletime %%F "!DD!-!MM!-20!YY! 00:00:00" "!DD!-!MM!-20!YY! 00:00:00" pause ) endlocal 

    Дальнейшее чтение

    • Индекс AZ для командной строки Windows CMD – отличная ссылка для всех связанных строк Windows.
    • Enabledelayedexpansion – Delayed Expansion приведет к тому, что переменные будут расширены во время выполнения, а не во время разбора.
    • For / r – Прокрутка файлов (вложенные папки Recurse).
    • Set – отображать, устанавливать или удалять переменные среды CMD. Изменения, внесенные с помощью SET, останутся только на время текущего сеанса CMD.
    • Setlocal – Установить параметры для управления видимостью переменных окружения в пакетном файле.

    Я нашел другое решение, просто вызвав функцию.

     FOR /R dirname %%F in (*.*) DO call :Setfiletime %%F goto End :Setfiletime SET FNAME=%~n1 echo %FNAME% SET MM=%FNAME:~0,2% SET DD=%FNAME:~2,2% SET YY=%FNAME:~4,2% nircmd.exe setfiletime %1 "%DD%-%MM%-20%YY%" "%DD%-%MM%-20%YY%" :goto :eof :End 

    Спасибо всем за вашу помощь.

    Давайте будем гением компьютера.