2015-12-14 80 views
-2

我有一个获取文件大小为特定文件的程序(不必担心对if语句或LINE_NUMBER变量)...FOR命令变量扩展错误

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

(PS %currentRoom%是文件名为bob.txt

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

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

你能帮我吗? (我是FOR命令的新手)

+0

请与错误的文本表示更换的屏幕截图。 Windows命令提示符支持通过系统菜单复制内容。 – IInspectable

+0

%nfilesize%%filesize%。我建议你发布整个批处理文件,而不是这个小部分。 – Squashman

回答

0

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

还忘了%围绕环境变量名称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 /?
0

在编写批处理脚本时,使用%%代替for循环变量。

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

我仍然有同样的错误... – andersamer

+0

@andersamer - 那么你已经离开了你的问题,因为你目前描述的代码完美的作品。 http://i.imgur.com/lBSShJs.png – SomethingDark

+0

任何代码之前的事情? (例如其他'for'循环) – andersamer