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 如何获取文件夹中图标文件的文件名,以便为文件夹创建/更新desktop.ini?_Batch File_Command_Filenames - Fatal编程技术网

Batch file 如何获取文件夹中图标文件的文件名,以便为文件夹创建/更新desktop.ini?

Batch file 如何获取文件夹中图标文件的文件名,以便为文件夹创建/更新desktop.ini?,batch-file,command,filenames,Batch File,Command,Filenames,我需要帮助返回文件夹中文件的文件名 我读过几次其他问题,答案似乎是: for /d %F in (*.*) do echo %~nxF 虽然这似乎对其他所有人都有效,但当我在批处理文件中运行它时,它有一个异常,并表示此时不需要“~nxF” 我要做的是创建一个批处理文件,该文件将读取图标文件名,然后将特定信息输入到desktop.ini中,最后创建具有相应权限或属性的文件 @echo off set NAME=%~dp0 for %%* in (.) do set NAME=%%~n* se

我需要帮助返回文件夹中文件的文件名

我读过几次其他问题,答案似乎是:

for /d %F in (*.*) do echo %~nxF
虽然这似乎对其他所有人都有效,但当我在批处理文件中运行它时,它有一个异常,并表示此时不需要“~nxF”

我要做的是创建一个批处理文件,该文件将读取图标文件名,然后将特定信息输入到
desktop.ini
中,最后创建具有相应权限或属性的文件

@echo off

set NAME=%~dp0
for %%* in (.) do set NAME=%%~n*

set FOLDERICO=%NAME%
set ICONSIZES=16 24 32 48 64 128 256
set FOLDERINI=Desktop.ini

attrib +s "%CD%"

if exist %FOLDERINI% attrib -s -h %FOLDERINI%

echo [.ShellClassInfo] > %FOLDERINI%
echo IconResource=\[Video]\[HD Films]\%FOLDERICO%\Icon\%FOLDERICO%.ico,0 >> %FOLDERINI%

if not "%2"=="" (
    echo FolderType=%2 >> %FOLDERINI%
)
attrib -a +s +h %FOLDERINI%
我认为代码可以改进,从根目录而不是特定文件夹运行

编辑:更新了我的文件,因此现在看起来像这样:

@ECHO OFF

attrib +s "%CD%"
set ICODIR=%CD%\Icon\

for %%F in ("%ICODIR%"*.ico) do set ICO=%%~nxF
echo %ICO%

set ICOINI=Desktop.ini
if exist %ICOINI% attrib -s -h %ICOINI%

echo [.ShellClassInfo] > %ICOINI%
echo IconResource=%ICODIR:~2%%ICO%,0 >> %ICOINI%

if not "%2"=="" (
    echo FolderType=%2 >> %ICOINI%
)

attrib -a +s +h %ICOINI%

Pause

我需要将其放入一个for循环,扫描根目录的每个子目录。

这里是一个完整的批处理代码,用于创建或更新文件夹图标的桌面.ini,也可用于当前驱动器根目录中指定文件夹或所有文件夹的文件夹类型(或删除/注释单行的当前目录)

创建desktop.ini非常简单,因为它可以通过查看代码来查看。如果只使用Windows命令处理器
cmd.exe
的内部命令,则更新现有ini文件以替换行或在必要时将行添加到正确的部分要困难得多,因为Windows命令处理器
cmd.exe
不适用于此类任务

@echo关闭
rem CreateDesktopIni.bat[FolderName | FolderType][FolderType]
rem此批处理文件可以在没有任何参数的情况下启动以创建或删除
当前驱动器根目录中所有子文件夹的rem update desktop.ini或
rem当前工作目录,删除或注释中的一行
下面的rem代码,请参阅下面的注释标签AllFolders。
但是批处理文件也可以用文件夹名启动
rem仅创建或更新此文件夹的desktop.ini文件。
rem(可选)可以将文件夹类型指定为唯一参数
rem或append作为文件夹名称后的第二个参数指定文件夹类型。
rem文件夹类型可以是以下字符串之一(未验证):
rem CommonDocuments、Contact、Documents、Music、MusicAlbum、MusicArtist、,
rem音乐、我的文档、我的音乐、我的图片、我的视频、相册、,
rem图片、UseLegacyHTT、视频相册、视频
setlocal EnableExtensions DisableDelayedExpansion
设置“FolderType=%~2”
rem定义包含文件夹图标的子文件夹。
设置“IconFolder=图标”
rem是否使用至少一个参数调用批处理文件?
如果“%~1”==”转到所有文件夹
rem是!可能是文件夹名称或文件夹类型。
如果不存在“%~1”设置“FolderType=%~1”&转到所有文件夹
rem First参数指定一个文件夹(很可能为未验证)。
设置“文件夹=%~1”
rem删除尾部反斜杠(如果有)。
rem批处理文件不应仅使用\as文件夹路径调用。
如果“%Folder:~-1%”==“\”set“Folder=%Folder:~0,-1%”
rem调用子例程创建或更新此文件夹的桌面文件。
调用:DesktopINI“%Folder%”
后藤末批
:所有文件夹
rem将工作目录更改为当前驱动器的根目录。删除或注释
rem是要处理的下一行,而不是当前目录中的所有子文件夹。
光盘\
rem调用子例程为每个子文件夹创建/更新桌面文件。
对于/F“eol=| delims=“%%I in('dir/AD/b2^>nul'),请调用:DesktopINI“%%I”
后藤末批
rem子例程,用于创建或更新文件夹的桌面文件。
rem此子例程首先搜索图标文件,但不执行任何操作
rem如果在定义的子文件夹中找不到图标文件,因为
rem子文件夹根本不存在或没有*.ico文件。
确定具有完整路径的图标文件(首次找到*.ico文件)后的rem
rem包括驱动器号(删除相对路径的字符d
rem驱动器号与%%~dpnxI一致),此子例程下一步检查
rem当前文件夹中存在文件desktop.ini(不区分大小写)。
如果该文件
rem不存在,批处理文件的用户具有权限
rem在当前文件夹中创建此文件。
rem对于已经存在的desktop.ini是更新它的必要过程
rem要复杂得多。节以外的所有行[.ShellClassInfo]
rem必须保留,因此仅复制到临时文件中,除非
rem空行被的命令忽略。也包括节中的所有行
rem[.ShellClassInfo]不以字符串IconFile=或(可选)开头
rem FolderType=(两个都不区分大小写)也必须通过复制来保持
将它们快速移动到临时文件。
rem第[.ShellClassInfo]节中以IconFile=开始的现有线
rem不会复制到临时文件,而是将此行写入
rem具有已确定图标文件名和路径的临时文件。
rem第[.ShellClassInfo]节中以FolderType=开头的现有行
rem也不会复制到临时文件,而是写入这一行
rem到具有启动批处理时指定的文件夹类型的临时文件。
如果找到节[ShellClassInfo],并且新节的开头是
检测到rem,因为一条线以开口方括号和
未找到IconFile=和/或FolderType=的行
rem在处理现有desktop.ini时,在本节中
rem被写入临时文件旁边,以便在继续之前插入它们
请看下一节。
rem最后可能发生的情况是,[.ShellClassInfo]节在
rem现有desktop.ini,因此必须添加到文件中。并且
rem可能是这个部分存在于desktop.ini的末尾,但是
rem缺少IconFile=或FolderType=或两者都缺少的行,并且
因此,必须将这些行追加到文件中。
rem下一步将在现有desktop.ini上复制临时文件,然后
然后删除rem,因为不再需要。