【问题标题】:for loop batch filefor循环批处理文件
【发布时间】:2023-04-08 07:32:01
【问题描述】:

如何将批处理文件复制到子目录,运行它,然后删除批处理文件?

我正在处理一个批处理文件,它会自动更改它所在文件夹的文件夹图标。如下所示:

@ECHO OFF

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

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

set ICOINI=Desktop.ini

IF EXIST Desktop.ini (
    attrib -s -h %ICOINI%
)

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

attrib -a +s +h %ICOINI%

Pause

这是可行的,在发现许多问题后,它不会创建文件夹图标,直到该目录中的文件被删除。

我一直在尝试使用 for 循环来列出所有子目录并存储它们的名称。虽然它首先列出了根目录。我怎样才能让它跳过根目录?代码如下:

@ECHO OFF

for /R /D "delims=\" %%d IN (%CD%) do echo %%~nd

Pause

编辑:为什么文件只在最后一个文件夹中制作?

for /D /R "%cd%" %%d IN (*) do (

    set something=%%~nd 
    echo TEST>%something%\Desktop.txt
)

【问题讨论】:

  • 您的第一个脚本适用于我 (Win7)。什么必须删除才能生效?
  • @Jubjub Bandersnatch 当我运行它时,除了实际更改文件夹图标(也是 Win7)之外,它完全按照它应该做的事情,只有在文件夹中删除文件时才会出现图标.
  • 这听起来更像是资源管理器的问题,而不是你的脚本。

标签: windows for-loop batch-file cmd command


【解决方案1】:

试试这个:

for /D /R "%cd%" %%d IN (*) do echo %%~d

%cd% 不会被列出。

【讨论】:

  • 效果很好!将 end 变量更改为 %%~nd 以获取文件夹名称,非常感谢。
【解决方案2】:

嗯.. 有趣的场景。

尝试在 http://ss64.com/nt/forfiles.html 查看 forfiles 命令。 但是使用for 命令这是我能想到的最佳解决方案。

:loop
set /a count+=1

for /f "tokens=%count% delims=\" %%a in ("%CD%") do (echo %%a > 
output.txt)

if %count% == 8 exit
goto :loop

请注意,这不是最佳答案,但它有效。此实例将从驱动器号中检查最多 7 个目录,但会增加 if 检查。

这对我有用,希望对您有所帮助。

你的莫娜。

【讨论】:

  • 谢谢,看起来好像可以解决问题,尽管子目录包含大约 1,000-2,000 个文件夹。我将不得不向上循环并测试它!
  • 哇,你真的应该试试forfiles,它有时比for /r 命令非常有用
【解决方案3】:

对于第二部分,我发现添加 IF 语句可以过滤掉搜索的根。您的示例对我根本不起作用,因此我不得不对其进行一些修改。 /R 将搜索中的当前目录(不是 %CD%)添加到循环变量中,所以我不得不去掉一些哨兵值。我认为很难找到名称中带有“ZZZZZ”的文件,但您的文件系统可能需要不同的标记。

FOR /R "%CD%" %%d IN (ZZZZZ) do @(SET "D=%%~d" & SET "D=!D:\ZZZZZ=!" & IF NOT "!D!"=="%CD%" @ECHO !D!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2013-10-01
    相关资源
    最近更新 更多