簡體   English   中英

批處理腳本循環

[英]Batch script for loop

我在批處理腳本中遇到了for循環問題。 當我嘗試:

for /f "delims=;" %g in ('dir') do echo %g%

我看到這個

'dir' is not recognized as an internal or external command,
operable program or batch file.

我錯過了某事嗎? 為什么Windows命令不起作用?

不要那樣做 使用for /f遍歷dir輸出會遇到各種各樣的問題。 而是只使用

for %g in (*) do @echo %g

在您的問題中,您說echo %g%是錯誤的(尾隨的%將按字面值返回)。

將命令直接鍵入命令提示符時,請使用:

for /f "delims=" %g in ('dir /B') do echo %g

批處理文件中使用時for您需要為其變量加%

for /f "delims=" %%g in ('dir /B') do echo %%g

選項delims=; 沒有任何意義,因為dir沒有給出用分號分隔的列表,因此我停用了delims

/B開關將dir輸出更改為純格式(無頁眉和頁腳,僅包含文件和dir.s)。

看來%comspec%變量已為空或已更改,並且找不到cmd.exe

在運行的機器上進行測試以查看錯誤,並刪除第2行以使其正常工作。

@echo off
set comspec=c:\aaa
for /f "delims=;" %%g in ('dir') do echo %%g
pause

很有意思的是,cmd.exe的路徑已緩存。
以下兩個腳本是相同的,只是命令的順序有所更改

此批處理文件將失敗,既for命令

@echo off
set comspec=c:\aaa
for /f "delims=;" %%g in ('dir') do echo %%g
pause
set "comspec=%windir%\System32\cmd.exe"
for /f "delims=;" %%g in ('dir') do echo %%g
pause

該批處理文件將對命令都for

@echo off
set "comspec=%windir%\System32\cmd.exe"
for /f "delims=;" %%g in ('dir') do echo %%g
pause
set comspec=c:\aaa
for /f "delims=;" %%g in ('dir') do echo %%g
pause

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM