如果声明麻烦

时间:2013-06-25 00:29:24

标签: windows if-statement batch-file cmd command

不完全确定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与批处理文件有关。好像我删除了文件夹中的文件它会起作用,难怪我找不到错误>。<

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

答案很明显。

如果确实如此,你就不会问这个问题。

答案 2 :(得分:2)

尝试这一点以了解您传递的参数。您的问题可能是由许多事情引起的。

  1. 输入参数中可能包含空格或特殊字符。
  2. 如果您以“管理员身份运行”,则当前目录将会更改,并且不会出现您的想法。
  3. ICODIR是否包含空格?
  4. 我将您的代码修改为

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

      @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