![](/img/trans.png)
[英]python : windows : Subporcess open a .bat file in a new command window and run
[英]Windows .Bat file behave differently when executed from command window and by double clicking on the bat file
從命令窗口執行並雙擊bat文件時,Windows .Bat文件的行為會有所不同。 這是我的文件:
ECHO ON
del activity_ftp.log
cd D:\My_Test
IF EXIST united_ops*.csv (
for %%i in (united_ops*.csv) do (
set size=0
set /A size=%%~zi
echo %%i,%size%,397312,624640 > D:\My_Test\activity_ftp.log
)
)
當我通過打開命令窗口並調用它來運行它時,
您的代碼中存在一些問題。
cd d:\\My_test
如果你是只會工作D:
你可以使用cd /d
或pushd
這里。
echo ...%size%
不起作用,因為它在解析for塊而不是在執行時會擴展。
if exist
似乎是多余的,因為for %%i in ( united_ops*.csv)
僅在存在任何文件時才擴展。
ECHO ON
setlocal EnableDelayedExpansion
del activity_ftp.log
pushd D:\My_Test
for %%i in (united_ops*.csv) do (
set size=0
set /A size=%%~zi
echo %%i,!size!,397312,624640 > D:\My_Test\activity_ftp.log
)
建立在jeb的答案上。
1)您的FOR循環可能會遍歷許多與您的模式匹配的文件。 但是您使用文件重定向的覆蓋模式。 找到的每個文件都將覆蓋先前文件的輸出。 您的最終輸出文件不會超過一行。 您可以使用>>
更改為追加模式,但是有更好的方法。 將整個循環括在圓括號中,然后使用>
在覆蓋模式下重定向一次,這樣更快。
2)您將大小設置為0,然后將其設置為文件大小,然后在回顯該行之后就不再使用它。 我懷疑您根本不需要該變量,因此您不需要延遲擴展。
3)您在頂部刪除的文件不包含路徑信息,因此可能無法從正確的文件夾中刪除。 即使是這樣,這也是不必要的,因為無論如何您都將以覆蓋模式進行重定向。
4)您可以在FOR語句中包含路徑,而不是更改當前目錄。
ECHO ON
>"D:\My_Test\activity_ftp.log" (
for %%i in ("d:\My_Test\united_ops*.csv") do (
echo %%~nxi,%%~zi,397312,624640
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.