【问题标题】:If statement trouble [closed]if语句麻烦[关闭]
【发布时间】:2013-06-25 00:29:24
【问题描述】:

不完全确定 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 相关,而不是批处理文件。好像我把文件夹里的文件删了就行了,难怪找不到错>.

【问题讨论】:

  • 您要问我们的问题到底是什么?我在这里没有看到一个。你有什么问题?
  • 我想知道如果IF语句搞砸了批处理文件。有时它会重新创建文件夹的图标,有时它会创建文件夹图标,但在查看文件夹属性时只会很小,有时它什么也不做。不知道为什么,想知道是IF语句,Windows还是我写的代码。
  • edit您的问题并在那里提供该信息,人们可以看到它。您仍然没有提出问题,所以当您进行编辑时,请这样做。这是一个问答网站,要获得答案,您必须先提出问题。 :-) 您需要具体说明它 - 诸如“我的 IF 语句是否有效?”之类的问题。这不是一个合适的问题。
  • 你说得对,我只是陈述了我想知道的!从技术上讲,这不是一个问题……我陈述了我认为的问题所在,并表示我想知道我认为的问题是否存在。
  • 我已经向您询问了两次 edit 并提供了您遇到的具体问题,并提出了一个具体问题。你没有做过这两件事。 描述您要解决的问题,并提出具体问题。 “你觉得这合适吗?”不是一个有效的问题,而且您在这里没有清楚地描述问题。

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


【解决方案1】:

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

  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

【讨论】:

  • "%2" 更改为 "%~2" 以获得更可靠的比较。
  • 是的...感谢 foxidrive 指出这一点。我打算这样做。我编辑了上面的代码。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的帮助,我自己也不确定。 %~2 会发生什么变化?我认为根本不需要这个 is 声明,因为无论如何我都创建了 Desktop.ini,你认为我需要它吗?
  • 批处理参数可能有双引号和空格,如果是这样,你应该这样使用它:"%~1"。波浪号删除双引号,因此您可以再次保存添加它。我不知道,if需要这个声明来让你的 .ini 工作。
  • 看来我需要某种检查。我试过去掉 if 语句,它有时会创建文件夹图标,有时不会。当我取出 if / if not 时,它说第一次运行时“Desktop.ini”不存在(我添加了没有 IF / IF not 的代码)
  • 如果完全删除if 语句,foldertype 将不会被写入。
  • 我想我根本不需要它来回显 FolderType。我只需要一个 if 语句来检查 Desktop.ini 是否存在,如果不存在,则创建一个。我怎么能那样做? 如果不存在 %ICOINI% echo something>>%ICOINI% attrib -s -h %ICOINI% 这样可以解决问题吗?
【解决方案3】:

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

答案很明显。

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

【讨论】:

  • 这并不明显,可能有很多我不知道的问题。这对你来说可能是显而易见的,但这不是光顾和羞辱其他寻求帮助的人的理由。谢谢你让我觉得自己高了两英寸。
  • 正如我之前向 Ken White 提到的,有时有效,有时无效。我不知道为什么,从字面上看没有,它可能看起来很愚蠢,你可能认为我像两块短板一样厚,我不在乎你认为我有多迟钝,或者我的问题是,但至少感谢你的诚实回答。注意/批处理有时也可以在没有 if 语句的情况下工作,有时不能。所以我试图确定错误来自哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
相关资源
最近更新 更多