變量我有一個問題如何設置多個文件作爲批處理文件變量?我試圖做一些下面的腳本:設置文件名作爲批處理文件
move c:\*.gpg q:\
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
以上正常工作只有一個文件。如果有超過兩個,它只會迴響其中一個。如何在一行中回顯所有複製的文件?
變量我有一個問題如何設置多個文件作爲批處理文件變量?我試圖做一些下面的腳本:設置文件名作爲批處理文件
move c:\*.gpg q:\
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
以上正常工作只有一個文件。如果有超過兩個,它只會迴響其中一個。如何在一行中回顯所有複製的文件?
有多個問題與您的代碼
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
首先,你要指定新值變量文件中的每個循環,然後每一次覆蓋它沒有做任何事情。因此,在循環後file
將只包含在最後一個循環的價值。移動echo
部分內環路,而不是
另一個問題是變量在默認情況下,分析時展開。您需要enable delayed expansion和使用!
代替%
,使其在運行時
Setlocal EnableDelayedExpansion
for %%F in ("q:\*.gpg") do (
set file=%%~nxF
echo done copying file: !file!
)
擴大如果你想呼應一次,然後所有文件設置file
變量包含的文件列表
for %%F in ("q:\*.gpg") do (
set file=!file!, %%~nxF
)
echo done copying files: %file%
的檢查文件存在是多餘的。移動後可以檢查退出代碼,如果文件沒有移動,可以退出。
的變量是不恆定所以記得要激活擴張延遲變量,這裏的變量file
的擴大必須延遲。
延遲擴展將導致變量在執行時,而不是在分析時被擴展,這個選項是打開與SETLOCAL
命令。當延遲擴展是有效的變量可以使用!variable_name!
(除了正常%variable_name%
)引用
延遲與FOR
循環工作時,通常爲整個FOR
變量擴展通常是有用即使循環跨越批處理腳本的多行,循環也會被評估爲單個命令。 這是一個FOR
循環的默認行爲:
例子:
@echo off
setlocal
:: count to 5 storing the results in a variable
set _tst=0
FOR /l %%G in (1,1,5) Do (echo [%_tst%] & set /a _tst+=1)
echo Total = %_tst%
C:\> demo_batch.cmd
[0]
[0]
[0]
[0]
[0]
Total = 5
注意,當FOR
循環結束,我們得到正確的總,所以變量正確遞增,但在循環 的每次迭代期間,變量被卡在它的初始值0處0
與EnableDelayedExpansion
相同的腳本,給出相同的最終結果也顯示中間值:
@echo off
setlocal EnableDelayedExpansion
:: count to 5 storing the results in a variable
set _tst=0
FOR /l %%G in (1,1,5) Do (echo [!_tst!] & set /a _tst+=1)
echo Total = %_tst%
C:\> demo_batch.cmd
[0]
[1]
[2]
[3]
[4]
Total = 5
注意內部的for循環,我們使用!variable!
,而不是%variable%
。
而且你的批處理腳本可以寫成這樣:
@echo off
Set "Ext=*.gpg"
set /a Count=0
Setlocal EnableDelayedExpansion
for %%F in ("q:\%Ext%") do (
SET /a Count+=1
set "file=%%~nxF"
echo Done copying file [!Count!] : !file!
)
SET /a "COUNT_TOT=%Count%"
ECHO.
ECHO Total of [%EXT%] files(s) : %Count% file(s)
pause
首先,你應該組中的兩個你的命令:'set'和'if'在同一個塊(既每個'for'迭代執行)。其次,它似乎是一個[延遲擴展](http://ss64.com/nt/delayedexpansion.html)問題。檢查[這篇文章](http://stackoverflow.com/questions/10558316/example-of-delayed-expansion-in-batch-file)或[這一個](http://stackoverflow.com/questions/22278456/啓用 - 禁用 - 延遲 - 擴展 - 它做了什麼)(或_Google_ing顯示的其他許多人)。 – CristiFati