【问题标题】:Changing multiple folder icons by dropping folder as input to a batch script通过将文件夹作为批处理脚本的输入来更改多个文件夹图标
【发布时间】:2018-02-11 14:49:39
【问题描述】:

我有一个用于更改文件夹图标的批处理脚本。

If [%1] == [] goto :eof
ECHO [.ShellClassInfo] >%1\desktop.in
ECHO IconResource=Example.ico,0 >>%1\desktop.in
move %1\desktop.in %1\desktop.ini
attrib +S +H %1\desktop.ini
attrib +R %1

问题是目前批处理文件只接受一个文件夹。

有没有办法接受多个放置的文件夹?

【问题讨论】:

  • 你是通过在批处理文件上拖放文件夹来调用它吗?

标签: batch-file


【解决方案1】:

如果您删除了多个文件夹,则会收到它们%1 只是其中的第一个。接下来是%2 等。有一个shift 命令,它将参数向左移动(%1 被丢弃,%2 成为新的%1 等):

@echo off
:loop
  if "%~1"==""  pause & goto :eof
  echo %~1
  shift
goto :loop

注意:使用双引号代替 [] 以正确处理带有空格的文件夹(并避免 if 命令出现语法错误。
使用 %~1 删除任何周围的引号(如果文件夹名称包含空格,则会自动添加。
行长度限制约为 8200 个字符。如果你删除的文件夹太多(超过字符限制),它将被切断。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    @echo off
    Color 0A & Mode 75,3
    set "ScriptName=%~nx0"
    Title Drag and Drop a folder or multi folders over "%ScriptName%"
    if "%~1"=="" goto error
    :loop
    set "$Folder=" & pushd "%~1" 2>nul && ( popd  & set "$Folder=%~1" 
    ) || ( 
        set "$Folder=" && echo "%~1" is not a folder & pause
    )
    If Defined $Folder Call :WriteDesktopIni %$Folder%
    shift
    if not "%~1"=="" goto loop
    echo(
    echo  End of the script "%ScriptName%"
    Timeout /T 3 /nobreak>nul & Exit
    ::***************************************************************************
    :WriteDesktopIni [Folder]
    if exist "%~1\desktop.ini" ( attrib -h -s -a "%~1\desktop.ini" >nul 2>&1 )
    (
        ECHO [.ShellClassInfo] 
        ECHO IconResource=%systemroot%\system32\shell32.dll,47
    )>"%~1\desktop.ini"
    attrib +S +H +A "%~1\desktop.ini"
    attrib +R "%~1"
    goto :eof
    ::***************************************************************************
    :Error
    echo(
    echo   You should drag and drop a folder or multi folders over "%ScriptName%"
    Timeout /T 3 /nobreak>nul & exit
    ::***************************************************************************
    

    编辑:CustomIconFolder.bat

    在此脚本中,您可以通过拖放到脚本上选择一个或多个文件夹以及您的自定义图标

    @echo off & Setlocal EnableDelayedExpansion
    Color 0A & Mode 78,5
    set "ScriptName=%~nx0"
    set /a "count=0"
    Title Drag and Drop a folder or multi folders over "%ScriptName%"
    if "%~1"=="" goto error
    for %%a in (%*) do ( 
        set /a "count+=1"
        set "$Folder=" & pushd "%%~a" 2>nul && ( popd  & set "$Folder[!count!]=%%~a"
            ) || ( 
            set "$Folder="
            Setlocal DisableDelayedExpansion
            color 0C & echo(
            echo    "%%~a"
            echo     ====^> is not a folder !
            echo     Exiting the script . . .
            endlocal
            Timeout /T 3 /nobreak>nul & exit
        )
    )
    Rem Dispaly selected folders
    Mode 75,10
    Setlocal EnableDelayedExpansion
    for /L %%i in (1,1,%count%) do (
        If [%count%] EQU [1] (
            echo You have chosen this folder : 
            echo [%%i] - "!$Folder[%%i]!"
        ) else (
            echo [%%i] - "!$Folder[%%i]!"
        )
    )
    Timeout /T 2 /nobreak>nul
    Mode 78,8 & Cls & echo(
    echo Please drag and drop your custom icon to be set to your folder over here
    echo and press enter...
    echo(
    echo Or just write the whole path and press enter ...
    Set /p "Icon="
    If [!Icon!] EQU [] (
        cls & echo(
        echo  The selected icon is : "%systemroot%\system32\shell32.dll,47"
        Timeout /T 3 /nobreak>nul
            for /L %%i in (1,1,%count%) do (
                echo !$Folder[%%i]!
                Call :WriteDesktopIni !$Folder[%%i]! "%systemroot%\system32\shell32.dll,47"
            )
    ) Else (
            for %%a in (!Icon!) do ( set "Icon_Name=%%~nxa" & set "Ext=%%~xa" )
            If /I [!Ext!] EQU [.ICO] (
                cls & echo(
                echo The selected icon is : "!Icon_Name!"
                echo From this path : !Icon!
                Timeout /T 3 /nobreak>nul
                for /L %%i in (1,1,%count%) do (
                    echo "!$Folder[%%i]!"
                    Copy /y !Icon! "!$Folder[%%i]!\!Icon_Name!">nul 2>&1
                    Attrib +H "!$Folder[%%i]!\!Icon_Name!">nul 2>&1
                    Call :WriteDesktopIni !$Folder[%%i]! "!Icon_Name!"
                )
            ) else (
                Cls & Color 0C & echo( 
                echo The extension : [*!Ext!] is not allowed
                Timeout /T 3 /nobreak>nul
            )
    )
    cls
    echo(
    echo  End of the script "%ScriptName%"
    Timeout /T 2 /nobreak>nul & Exit
    ::***************************************************************************
    :WriteDesktopIni [Folder] [Icon]
    if exist "%~1\desktop.ini" ( attrib -h -s -a "%~1\desktop.ini" >nul 2>&1 )
    (
        ECHO [.ShellClassInfo] 
        ECHO IconResource=%~2
    )>"%~1\desktop.ini"
    attrib +S +H +A "%~1\desktop.ini">nul 2>&1
    attrib +R %~1>nul 2>&1
    goto :eof
    ::***************************************************************************
    :Error
    Mode 86,10 & color 0B
    echo( & echo(
    echo   You should drag and drop a folder or multi folders over "%ScriptName%"
    echo(
    echo   Or Usage in command line like this syntax : 
    echo(
    echo   %~nx0 "FolderPath1" "FolderPath2" "FolderPath3" "FolderPath4"
    Timeout /T 10 /nobreak>nul & exit
    ::***************************************************************************
    

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多