Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 通过将文件夹作为输入拖放到批处理脚本来更改多个文件夹图标_Batch File - Fatal编程技术网

Batch file 通过将文件夹作为输入拖放到批处理脚本来更改多个文件夹图标

Batch file 通过将文件夹作为输入拖放到批处理脚本来更改多个文件夹图标,batch-file,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 问题是,当前批处理文件只接受一个拖放到其上的文件夹 有没有办法让它接受

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

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
问题是,当前批处理文件只接受一个拖放到其上的文件夹


有没有办法让它接受多个删除的文件夹?

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

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

您可以尝试以下操作:

@回音 颜色0A和模式75,3 设置脚本名=%~nx0 标题在%ScriptName%上拖放一个或多个文件夹 如果%%1==转到错误 :循环 set$Folder=&pushd%~12>nul&&popd&set$Folder=%1 || set$Folder=&&echo%~1不是文件夹&暂停 如果定义了$Folder调用:WriteDesktopIni%$Folder% 转移 如果不是%1==转到循环 回响 回显脚本%ScriptName%的结尾 超时/T 3/nobreak>nul和Exit ::*************************************************************************** :WriteDesktopIni[文件夹] 如果存在%1\desktop.ini attrib-h-s-a%1\desktop.ini>NUL2>&1 ECHO[.ShellClassInfo] ECHO IconResource=%systemroot%\system32\shell32.dll,47 >%~1\desktop.ini attrib+S+H+A%~1\desktop.ini attrib+R%~1 后藤:eof ::*************************************************************************** :错误 回响 echo您应该在%ScriptName%上拖放一个或多个文件夹 超时/T 3/nobreak>nul和exit ::*************************************************************************** 编辑:CustomIconFolder.bat

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

@echo off&设置本地启用延迟扩展 颜色0A和模式78,5 设置脚本名=%~nx0 设置/a计数=0 标题在%ScriptName%上拖放一个或多个文件夹 如果%%1==转到错误 对于%%a in%*do 设置/a计数+=1 set$Folder=&pushd%%~a2>num&&popd&set$Folder[!count!]=%%~a || 设置$Folder= Setlocal DisableDelayedExpansion 彩色0C&echo 回声%%~a echo==^>不是文件夹! echo正在退出脚本。 端部 超时/T 3/nobreak>nul和exit Rem显示所选文件夹 模式75,10 Setlocal EnableDelayedExpansion 对于1,1中的/L%%i,%count%do 如果[%count%]等于[1] echo您已选择此文件夹: 回声[%%i]$文件夹[%%i]! 其他的 回声[%%i]$文件夹[%%i]! 超时/T 2/nobreak>nul 模式78、8、Cls和echo echo请将自定义图标拖放到此处的文件夹中 回显并按回车键。。。 回响 回显或只需写入整个路径,然后按enter键。。。 设置/p图标= 如果[!Icon!]eq[] cls&echo 回显所选图标为:%systemroot%\system32\shell32.dll,47 超时/T 3/nobreak>nul 对于1,1中的/L%%i,%count%do 回声$文件夹[%%i]! 呼叫:WriteDesktopIni$文件夹[%%i]!%systemroot%\system32\shell32.dll,47 其他的 为了%%a英寸!偶像设置图标名称=%%~nxa&set Ext=%%~xa If/I[!Ext!]eq[.ICO] cls&echo 回显所选图标为:!图标名称! 回音从这个路径:!偶像 超时/T 3/nobreak>nul 对于1,1中的/L%%i,%count%do 回声$文件夹[%%i]! 收到!图标$文件夹[%%i]!\!图标名称!>nul 2>&1 Attrib+H$文件夹[%%i]!\!图标名称!>nul 2>&1 呼叫:WriteDesktopIni$文件夹[%%i]!图标名称! 其他的 Cls&Color 0C&echo 不允许回显扩展名:[*!Ext!] 超时/T 3/nobreak>nul cls 回响 回显脚本%ScriptName%的结尾 超时/T 2/nobreak>nul和Exit ::*************************************************************************** :WriteDesktopIni[文件夹][图标] 如果存在%1\desktop.ini attrib-h-s-a%1\desktop.ini>NUL2>&1 ECHO[.ShellClassInfo] ECHO IconResource=%~2 >%~1\desktop.ini attrib+S+H+A%~1\desktop.ini>num2>&1 属性+R%~1>NUL2>&1 后藤:eof ::*************************************************************************** :错误 模式86、10和颜色0B 回声&回声 echo您应该在%ScriptName%上拖放一个或多个文件夹 回响 命令行中的echo或用法如下语法: 回响 echo%~nx0 FolderPath1 FolderPath2 FolderPath3 FolderPath4 超时/T 10/nobreak>nul和exit ::************************************************************* **************
是否通过拖放批处理文件上的文件夹来调用它?
@echo off
:loop
  if "%~1"==""  pause & goto :eof
  echo %~1
  shift
goto :loop