1

不完全确定 IF 语句是否正常工作。我希望它识别 Desktop.ini 是否存在,是否具有要重写的正确属性,然后重置属性。

这个 IF 语句是否符合我的要求?有时它有时会起作用,但不管我是否有 IF / IF 都不起作用。我想我需要先检查文件是否存在,但我不确定如何。

@ECHO OFF

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

for %%F in ("%ICODIR%"*.ico) do set ICO=%%~nxF
echo %ICO%
echo %ICO:~0,-4%

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

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

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

attrib -a +s +h %ICOINI%

Pause

没有 if 语句的代码。

@ECHO OFF

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

for %%F in ("%ICODIR%"*.ico) do set ICO=%%~nxF
echo %ICO%
echo %ICO:~0,-4%

set ICOINI=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

编辑: 似乎它有时有效,有时与 Windows 无关,而不是批处理文件的原因。好像我删除文件夹中的一个文件它会工作,难怪我找不到错误>.<

4

3 回答 3

2

我不知道你的第二个参数。尝试:

 if not "%~2"=="" (
    echo FolderType=%2 >> %ICOINI%
于 2013-06-25T00:47:27.370 回答
2

你问的唯一问题是Does this IF statement do what I want it to?

答案很明显。

如果是这样,你就不会问这个问题了。

于 2013-06-25T00:49:40.983 回答
2

试试这个来了解你传入的参数。你的问题可能是由很多事情引起的。

  1. 您的输入参数中可能包含空格或特殊字符。
  2. 如果您“以管理员身份运行”,当前目录将被更改,并且不会是您认为的那样。
  3. ICODIR 是否包含空格?

我将您的代码修改为

  1. 添加一些调试代码
  2. 更改 %ICODIR%*.ico 周围的报价
  3. 正确处理 %2 (或者可能不......不确定你是否应该在你的回声中加上引号)

`

@ECHO OFF
echo.1=%1
echo.2=%2
echo.CD=%CD%

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

for %%F in ("%ICODIR%*.ico") do set ICO=%%~nxF
echo %ICO%
echo %ICO:~0,-4%

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

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

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

echo.ICOINI=%ICOINI%
attrib -a +s +h %ICOINI%

Pause
于 2013-06-25T02:14:29.770 回答