【问题标题】:FOR command variable expansion errorsFOR 命令变量扩展错误
【发布时间】:2015-12-14 23:15:08
【问题描述】:

我有一个程序可以获取特定文件的文件大小(不用担心if 语句或LINE_NUMBER 变量)...

setlocal EnableExtensions EnableDelayedExpansion
for %Q in (%currentRoom%) do set Nfilesize=%~zQ
if Nfilesize GTR filesize (
    set /A "LINE_NUMBER=LINE_NUMBER + 1"
)
endlocal

(P.S.%currentRoom%是一个名为bob.txt的文件)

我在测试后不断收到此错误(使用CALL 命令)...

The following usage of the path operator in batch-parameter substitution is invalid: %~zX

你能帮帮我吗? (我对FOR 命令有点陌生)

【问题讨论】:

  • 请将屏幕截图替换为错误的文本表示。 Windows 命令提示符支持通过系统菜单复制内容。
  • %nfilesize% %filesize%。我建议您发布整个批处理文件而不是其中的一小部分。

标签: windows batch-file for-loop


【解决方案1】:

在批处理文件中,您必须使用%%Q%%~zQ 作为在命令提示符窗口中运行时显示的命令FOR 的帮助help forfor /? 解释。 p>

您还忘记了 IF 条件下的环境变量名称周围的%

setlocal EnableExtensions EnableDelayedExpansion
set "filesize=16384"
set "currentRoom=myroom.txt"
for %%Q in (%currentRoom%) do set "Nfilesize=%~zQ"
if %Nfilesize% GTR %filesize% (
    set /A "LINE_NUMBER+=1"
)
endlocal

如果 FOR 循环和 IF 条件位于用 ( 定义的块内,则需要使用 ! 而不是 % 来使用延迟扩展... ) 用于在块中修改的所有变量,例如下面示例中的变量 Nfilesize

setlocal EnableExtensions EnableDelayedExpansion
set "filesize=16384"
set "currentRoom=myroom.txt"
(
    for %%Q in (%currentRoom%) do set "Nfilesize=%~zQ"
    if !Nfilesize! GTR %filesize% (
        set /A "LINE_NUMBER+=1"
    )
)
endlocal

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • endlocal /?
  • for /?
  • if /?
  • set /?
  • setlocal /?

【讨论】:

    【解决方案2】:

    在编写批处理脚本时,将%% 用于for 循环变量。

    for %%Q in (%currentRoom%) do set Nfilesize=%%~zQ
    

    【讨论】:

    • @andersamer - 那么您已经遗漏了一些问题,因为您当前描述的代码可以完美运行。 i.imgur.com/lBSShJs.png
    • 任何代码都重要吗? (例如其他 for 循环)
    • @andersamer - 看到错误是如何提及%~nX 而我们只使用Q,我希望使用X 变量的代码会导致该特定错误。根据实际上每隔一次在互联网上询问此问题,这是 100%,因为您在 for 循环变量中的某处缺少 %。编辑您的问题以包含您正在使用的整个代码不会有什么坏处。
    猜你喜欢
    • 2014-01-28
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多