有没有办法使用 Perl 脚本更改 Windows 文件夹图标?

2023-12-20

有没有办法使用 Perl 脚本更改 Windows 文件夹图标?

我的目的是将“xxx_documents”文件夹的普通图标更改为其他图标。我必须以照顾整个驱动器的方式运行脚本。

该驱动器包含许多文件夹。我必须搜索每个名为“文档”的文件夹(例如“xxx_documents”或简单的“文档”)并将其图标更改为"%SystemRoot%\system32\SHELL32.dll"图书馆。

这在 Perl 中可能吗?感谢所有帮助我的人。


你肯定可以用 Perl 做到这一点。 Windows 使用隐藏系统控制目录图标Dekstop.ini每个文件夹中的文件。内容看起来像这样:

 [.ShellClassInfo]
 IconFile=%SystemRoot%\system32\SHELL32.dll
 IconIndex=41

在 Windows XP 上(我假设在其他系统上),图标 41 是一棵树。 Windows 要求将此文件显式设置为system文件才能正常工作,这意味着我们需要深入研究Win32API::File创建它:

 #!/usr/bin/perl
 use strict;
 use warnings;

 use Win32API::File qw(createFile WriteFile fileLastError CloseHandle);

 my $file = createFile(
      'Desktop.ini',
      {
           Access     => 'w',        # Write access
           Attributes => 'hs',       # Hidden system file
           Create     => 'tc',       # Truncate/create
      }
 ) or die "Can't create Desktop.ini - " . fileLastError();

 WriteFile(
      $file,
      "[.ShellClassInfo]\r\n" .
      "IconFile=%SystemRoot%\\system32\\SHELL32.dll\r\n" .
      "IconIndex=41\r\n",
      0, [], []
 ) or die "Can't write Desktop.ini - " . fileLastError();

 CloseHandle($file) or die "Can't close Desktop.ini - " . fileLastError();

如果运行上面的代码,它应该将当前目录的图标设置为树。在资源管理器接受更改之前,您可能需要刷新目录列表。

现在我们有了更改图标的方法,现在我们可以遍历整个驱动器并更改与我们的模式匹配的每个文件夹。我们可以很容易地做到这一点File::Find,或其替代方案之一(例如,File::Find::Rule, or File::Next):

 #!/usr/bin/perl
 use strict;
 use warnings;
 use File::Find qw(find);
 use Win32API::File qw(createFile WriteFile fileLastError CloseHandle);

 my $topdir = $ARGV[0] or die "Usage: $0 path\n";

 find( \&changeIcon, $topdir);

 sub changeIcon {
     return if not /documents$/i;   # Skip non-documents folders
     return if not -d;              # Skip non-directories.

     my $file = createFile(
         "$_\\Desktop.ini",
         {
              Access     => 'w',        # Write access
              Attributes => 'hs',       # Hidden system file
              Create     => 'tc',       # Truncate/create
         }
     ) or die "Can't create Desktop.ini - " . fileLastError();

     WriteFile(
         $file,
         "[.ShellClassInfo]\r\n" .
         "IconFile=%SystemRoot%\\system32\\SHELL32.dll\r\n" .
         "IconIndex=41\r\n",
         0, [], []
     ) or die "Can't write Desktop.ini - " . fileLastError();

     CloseHandle($file) or die "Can't close Desktop.ini - " . fileLastError();
 }

不幸的是,我刚刚发现该图标only如果目录当前有或曾经有图标,则会发生更改...显然,在目录本身上设置了一个属性,该属性会导致 Windows 查找Desktop.ini文件,但我一生都无法弄清楚它是什么。因此,上述解决方案是不完整的;我们还需要找到并修复要添加图标的目录的属性。

Paul

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法使用 Perl 脚本更改 Windows 文件夹图标? 的相关文章

  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

    我正在尝试使用 openssl 将 cer 证书转换为 p12 证书 这是我正在使用的命令 C OpenSSL Win32 bin gt openssl x509 inform der in developer identity cer o
  • Perl 中可以使用哪种语法糖来减少左/右值运算符与 if 语句的代码?

    那里有很多语句 因为 Perl 是一种非常甜蜜的语言 但任何语言中最常用的语句都是 if 语句和设置值的组合 我想我已经找到了很多 但仍然存在一些空白 最终 目标是不必多次编写变量名 这是我到目前为止所拥有的 r s r s unless
  • 关键字“if”如何测试一个值是真还是假?

    在 bash 脚本中 if 1 then echo Yes else echo No fi Output Yes 它表示 1 被视为真值 但在代码中 word Linux letter nuxi if echo word grep q le
  • 以编程方式从 java 代码中查找 java.exe 的绝对路径

    如果我有一个由用户启动的 java jar 或类文件 假设在环境变量中设置了 java 路径 那么我如何从代码中找出 java exe javaw exe 的绝对路径文件正在启动 就像在 ubuntu 上一样 我们可以运行 which ja
  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 如何使用命令行压缩文件?

    我想使用批处理文件命令 Windows XP 批处理文件 压缩目录 例如 如果我想解压缩一个文件意味着我可以使用jar xf file zip java bat 文件命令 就像我想要一个命令行批处理来压缩目录一样 如果您使用的是 Ubunt
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?

    更大的问题是一般如何使用实时 ETW 网络堆栈事件 但我特别感兴趣Microsoft Windows NDIS PacketCapture 提供程序 所有其他网络堆栈提供程序都部分工作 但 NDIS PacketCapture NDIS P
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • Perl 非贪婪

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • teracopy 如何替换默认的 Windows 副本

    我问了这个问题Windows 文件复制内部结构 动态加密 https stackoverflow com questions 24220382 windows file copy internals on the fly encryptio
  • Windows 目录永远不会包含临时文件的非 ASCII 字符?

    在 Windows 上使用 MinGW 7 3 0 由于 Windows 限制 Hunspell 无法从包含非 ASCII 字符的位置加载字典文件 我已经尝试了所有方法 1 现在我将文件复制到没有 ASCII 字符的路径 然后再将其交给 H

随机推荐

  • 无法从 PKCS8 获取私钥

    无法从自行生成的 PKCS8 获取私钥 我已经生成了私钥 KeyPair pair getKeyPair StringWriter privateWriter new StringWriter try JcaPEMWriter w new
  • QTextDocument:获取特定页面的内容

    Given a QTextDocument具有特定的宽度和高度 有没有办法在给定页码的情况下获取给定页面的内容 如果页面上有图像 则为纯文本 图像 URL 这是我想要实现的目标的示例 QString getTextForPage int p
  • Android Gradle 5.0 更新:原因:org.jetbrains.plugins.gradle.tooling.util

    关于更新我的项目版本gradle到 5 0 版本时 我在 android studio 中遇到错误 它运行良好gradle 5 0 rc 3 and 4发布 以下是错误详细信息 原因 org jetbrains plugins gradle
  • 寻找一种在 PropertyGrid 中动态更改字段名称的方法

    我已将 COM 对象附加到属性网格 Type typeObj Type GetTypeFromProgID progIdService var obj Activator CreateInstance typeObj propertyGri
  • 如何在 Vuetify 中添加新节点

    我目前正在使用 Vuetify 制作树视图 树视图使用以下结构 items id 1 name Applications children id 2 name Calendar app id 3 name Chrome app id 4 n
  • 如何在 Linux 中分析 pthread 互斥体?

    我想知道如何分析 pthread 互斥体以查看我的代码中是否存在任何锁定争用点 谁喜欢有争议的代码 对吧 正如我提到的 我知道如何对代码进行更一般的分析here https stackoverflow com a 10800412 1158
  • 将数字转换为单词 C# [重复]

    这个问题在这里已经有答案了 可能的重复 如何将整数转换为其语言表示形式 https stackoverflow com questions 554314 how can i convert an integer into its verba
  • 如何在角度材料中启用和禁用滑动切换

    我已经使用 for 循环生成了垫子滑动切换列表 但想要的是 当我单击一个滑动切换时 其他滑动切换应该被禁用 my code HTML div class row div class col md 6 mt 2 div div
  • Wpf 数据网格问题

    要重现此问题 请添加用户控件 粘贴下面的 xaml 然后将实例添加到窗口 最后将窗口的数据上下文设置为 ADummyDataContext 的实例 也在下面 当您第一次运行该应用程序时 您应该得到一个包含三个类别的网格 每个类别包含一只猫
  • 以静态大小的数组作为参数的通用 lambda

    以下通用 多态 lambda 是否合法 C 14 auto f auto x 3 x 0 x 1 etc GCC 和 Clang 4 接受该代码 但 Visual Studio 2017 不接受 合法吗 error C3318 auto 3
  • 反应本机文本颜色不起作用

    我有一个Text里面的组件TouchableOpacity我想改变颜色取决于变量 这是我的代码 import React Component from react import StyleSheet Text View TouchableO
  • CUDA 小内核 2d 卷积 - 如何做

    我已经用 CUDA 内核试验了几天 在 500x500 图像 但我也可以改变尺寸 和非常小的 2D 内核 拉普拉斯 2d 内核 所以它是 3x3 内核 太小 之间执行快速 2D 卷积以利用所有 cuda 线程的巨大优势 我创建了一个 CPU
  • 使用 val() 设置输入值时会触发什么 jquery 事件?

    我可以设置这个监听器 input type text on keyup paste input change function console log Hello 如果我打开DevTools and do input type text v
  • 使用 PHP 将 Javascript 时间转换为 MySQL 格式

    我怎样才能转换js日期 像这样Sun Jul 13 2014 07 00 00 GMT 0200 EET 到 MySQL 格式 像这样2014 07 13 07 00 00 使用PHP 由于您的日期字符串已经包含时区 因此您不需要执行任何特
  • 在eclipse中调试黑莓应用程序“找不到源”问题

    我正在 Eclipse 中调试一个应用程序 它工作正常 但在某些方法上 例如输入EventDispatcher 它显示我找不到源 应附加哪些源文件以避免此问题 我不太清楚 听起来您正在尝试调试 RIM BB 操作系统代码 据我所知 RIM
  • 我可以让 Swing JButton 的边距更小吗?

    我更喜欢边距最小的按钮 大约与文本标题一样宽 有没有办法在 Swing 的 JButton 中实现这一点 我现在在实践中看到的是 即使我尝试使用 setMaximumSize 和类似的方法 它最终也会吃掉文本标题 将其从右侧切断 但这并没有
  • 查询中的日期格式更改

    我在 android 中使用 PHP JSON 作为 API 我使用下面的代码从 MYSQL 数据中获取新闻 它工作正常 但日期格式显示为年 月 日 但我想要得到它日 月 年 我搜索了很多但没有找到任何解决方案 这里有人可以解决我的问题吗
  • 如何在 Ant 中动态包含 ant-contrib.jar

    我正在寻找一种方法来包含 Ant 文件中的 jar 以便我可以立即使用它并在我的目标中调用它的方法 就我而言是ant contrib 1 0b3 jar 最好的方法是将 Ant Contrib jar 文件放入您的项目中 例如 假设buil
  • Python ftplib.error_perm: 530 登录验证失败

    我想编写一个脚本来连接我的 FTP 服务器 但它对我不起作用 from ftplib import FTP ftp FTP ftp set debuglevel 2 ftp connect 192 169 137 100 ftp login
  • 有没有办法使用 Perl 脚本更改 Windows 文件夹图标?

    有没有办法使用 Perl 脚本更改 Windows 文件夹图标 我的目的是将 xxx documents 文件夹的普通图标更改为其他图标 我必须以照顾整个驱动器的方式运行脚本 该驱动器包含许多文件夹 我必须搜索每个名为 文档 的文件夹 例如