命令行-一些问题

命令行-一些问题

我创建了一个批处理文件,用于压缩文件夹中选定的项目。(该文件放在“发送到”中)。

如果我使用以下代码:

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

这应该会对你有所帮助...

@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 多个文件,但它们的名称相对较短。我进一步修改了脚本以检查子目录。

希望能帮助到你!

相关内容