通过命令行在目录中的每个文件中运行python脚本

时间:2015-06-17 15:28:42

标签: python windows batch-file windows-shell

我有一个python脚本,它将文件名作为命令参数并处理该文件。但是,我需要处理数千个文件,我想在每个文件上运行脚本,而不必每次都添加文件名作为参数。

例如: process.py file1将完全符合我的要求

但是,我想在包含数千个文件(file1,file2,file3等)的文件夹上运行process.py

我发现它可以简单地用Bash

完成
for f in *; do python myscript.py $f; done

但是,我在Windows上并且不想安装像Cygwin这样的东西。 Windows命令行的一段代码看起来会模仿上述Bash代码完成的内容?

4 个答案:

答案 0 :(得分:1)

MPMediaItem *npItem = self.musicPlayerController.nowPlayingItem;
NSLog(@"Song Title: %@\n assetURL: %@\n Cloud Item: %d", npItem.title, [npItem valueForProperty:MPMediaItemPropertyAssetURL], npItem.cloudItem)


// Log Output
Song Title: Time We Had
assetURL: (null)
Cloud Item: 1

Song Title: The Quiet
assetURL: ipod-library://item/item.m4a?id=1529654720874100371
Cloud Item: 0

我认为这样做了 - 我现在没有方便的Windows手机试用它

How to loop through files matching wildcard in batch file

该链接可能会有所帮助

答案 1 :(得分:0)

import os, subprocess
for f in os.listdir('.'):
    if os.path.isfile(f):
        subprocess.call(["python", "myscript.py", f])

如果python可执行文件位于PATH中,此解决方案将适用于每个平台。

此外,如果要递归处理嵌套子目录中的文件,可以使用os.walk()而不是os.listdir() + os.path.isfile()

答案 2 :(得分:0)

既然你有python,为什么不使用它呢?

import subprocess
import glob
import sys
import os.path

for fname in glob.iglob(os.path.join('some-directory-name','*')):
    proc = subprocess.Popen([sys.executable, 'myscript.py', fname])
    proc.wait()

还有什么,它的便携性。

答案 3 :(得分:0)

对于当前目录中的每个文件。

for %f in (*) do C:\Python34\python.exe "%f"

<强>更新 请注意%f 上的引号。如果您的文件名称中包含空格,则需要它们。您还可以在执行之后添加任何路径+可执行文件。

如果我们想象您的文件如下:

./的 process.py

./ myScripts /的 file1.py

./ myScripts /的 file2.py

./ myScripts /的 file3.py

...

在您的示例中,只是:

for %f in (.\myScripts\*) do process.py "%f"

这会调用:

process.py ".\myScripts\file1.py"
process.py ".\myScripts\file2.py"
process.py ".\myScripts\file3.py"