Я создал командный файл для архивирования выбранных элементов в папке. (Файл помещен в «Отправить»).

Если я использую следующий код:

for %%* in (.) do set CurrentFolder=%%~n* "C:\Program Files\WinRar\WinRar" a -afzip "%CurrentFolder%.xpi"

  • Имя файла совпадает с именем текущей папки (правильно).
  • Все файлы заархивированы независимо от того, выберу я один файл или несколько файлов (неправильно).
  • Выбранные папки не архивируются (неправильно).

Если я использую следующий код:

set file=%~f1 "C:\Program Files\WinRar\WinRar" a -afzip "%file:~0,-4%.xpi" %1

  • Имя файла совпадает с именем файла, на котором я щелкаю правой кнопкой мыши (правильно).
  • Только этот файл архивируется, даже если выбрано несколько файлов (неправильно).

Как я могу узнать, выбран ли один элемент или более?

Какой синтаксис условия?

Как я могу включить папки в архив?

Спасибо.

1 ответ1

0

Это должно помочь вам ...

@echo off
::Save passed parameter to a variable...
set _loc=%~1

::Check if passed parameter is a file/folder and process accordingly...
if exist "%~s1\*" (echo Processing all files in folder %_loc% && echo. && goto :ProcFolders) else (echo Processing files && echo. && goto :ProcFile)
goto :exit

::When passed parameter is a folder...
:ProcFolders
::Check if folder is empty...
dir /b /a:-d "%_loc%" >nul 2>&1 && (echo  Non-empty folder!) || (echo Checking for sub-folders... && goto :CheckSubDir)

:CheckSubDir
dir /b /a:-d /s "%_loc%\*">nul 2>&1 && (echo. && echo Subfolders/files exist) || (echo. && echo No file or subfolders found && goto :exit)

::If folder has files or subfolders with files, continue here.
for /f %%g in ('dir /b /a:-d /s "%_loc%\*.*"') do echo Processing %%g &&    echo.
goto :exit

::When passed parameter is a file...
:ProcFile
if "%~1"=="" goto :exit
echo Processing %~1 && echo.
shift
goto :ProcFile
goto :exit

:exit
pause
exit /b

Сценарий проверяет, является ли переданный параметр папкой или отдельными файлами. Если файлы, он будет shift через переданные параметры и обрабатывать каждый файл в отдельности. Имейте в виду, что вы можете столкнуться с ограничением количества символов, которое может быть передано в качестве аргумента из командной строки или перетаскиваться, поэтому, если нужно обработать много файлов, просто обработайте всю папку. Я смог передать более 50 файлов без проблем, но их имена были относительно короткими. Я также изменил скрипт, чтобы проверить подкаталоги.

Надеюсь, поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .