通过删除文件夹作为批处理脚本的输入来更改多个文件夹图标

时间:2018-02-11 14:49:40

标签: batch-file

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

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

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

有没有办法让它接受多个丢弃的文件夹?

2 个答案:

答案 0 :(得分:3)

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

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

注意:使用doublequoutes而不是[]来正确处理带空格的文件夹(并使用if命令避免语法错误。
使用%~1删除任何周围的引号(如果文件夹名称包含空格,将自动添加。) 线路长度限制约为8200个字符。如果丢弃太多文件夹(超出字符限制),它将被截断。

答案 1 :(得分:1)

你可以尝试这样的事情:

@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
::***************************************************************************
相关问题