[英]running python script for multiple files from windows cmd
我正在嘗試從Windows cmd運行python腳本。 當我在linux下運行它時
python myscript.py filename??.txt
它會處理文件編號從filename01.txt到filename18.txt的文件,並且可以正常工作。
我試圖從cmd運行它
python myscript.py filename*.txt
要么
python myscript.py filename**.txt
但是沒有用。 如果我在Windows cmd中的一個文件上嘗試了該腳本,它將起作用。
您是否有問題的根源? 謝謝!
Unix shell將文件路徑模式轉換為實際文件,然后將結果傳遞給程序。 ( python myscript.py
)
但是在Windows cmd中,不會發生這種情況。
如果要獲取與模式匹配的文件列表,請參見glob.glob
。
在運行python腳本之前,這些通配符將在“ shell(即bash)級別”進行擴展。 因此,問題不在於python,而在於您在Windows上使用的“ shell”中。 可能您嘗試通過Windows將PowerShell運用於Windows或通過CygWin進行bash。
嘗試這個:
FOR %X IN (filename*.txt) DO (python myscript.py %X)
編輯 ,您可以創建一個.bat並嘗試。
setlocal EnableDelayedExpansion
set files=
FOR %%X IN (filename*.txt) DO set files=!files! %%X
echo %files%
python myscript.py %files%
從批處理文件
for %%f in ("filename*.txt") do python myscript.py "%%~nxf"
%%f
將獲得對每個文件的引用。 對於每個腳本,執行您的腳本。 %%~nxf
將擴展為文件名和擴展名。
在命令行中,將%%
替換為單個%
編輯-我誤解了這個問題。 下次嘗試。
在Windows中,沒有通配符參數的默認擴展(請參閱此處 )。 因此,要獲得相同的結果,您將需要一個批處理文件。 它將連接文件列表並將其傳遞給您的python腳本
@echo off
setlocal enabledelayedexpansion
set "fileList="
for %%f in ("*.txt") do set "fileList=!fileList! "%%f""
python myscript.py !fileList!
endlocal
對於更可重用的代碼,請使用以下命令(腳本調用僅回顯到屏幕上以顯示參數的效果並避免不必要的執行,請按預期的方式刪除)
@echo off
setlocal enableextensions
call :glob "*.txt" true fileList
echo python myscript.py %fileList%
echo.
call :glob "*.txt" false fileList
echo python myscript.py %fileList%
exit /b
:glob pattern useFullPath outputList
setlocal enabledelayedexpansion
if /i "%~2"=="true" (set "_name=%%%%~ff") else (set "_name=%%%%~nxf")
set "_list="
for %%f in ("%~1") do set "_list=!_list! "%_name%""
endlocal & if not "%~3"=="" set "%~3=%_list%"
如falsetru
,在Windows上,shell不會為您擴展通配符,因此正確的答案是glob.glob()
。 您應該遍歷所有命令行參數並展開每個參數。 這在Linux / UNIX中也可以正常工作,因為參數的擴展名中沒有任何通配符(這是Shell給出的),即文件名不變。 像這樣,使用惰性求值來處理可能大量的args:
from sys import argv
from glob import glob
from itertools import chain, islice
for name in chain.from_iterable(glob(name) for name in islice(argv, 1, None)):
# do something with each file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.