0

我正在构建一个 powershell 脚本,它做了很多工作,从 zip 中提取 csv,转换 OS->lat/lon,将内容可靠地填充到数据库中,然后通过电子邮件发送一个包含整个过程统计信息的分发列表。

现在大部分已经完成,但是为了使整个事情更便携,我提供了输入/工作/输出文件夹的路径作为批处理文件中的 powershell 调用的参数。

在我需要调用 python 脚本来完成纬度/经度工作之前,这一切都非常有效,因为传入可变参数路径似乎不适用于任何排列/组合。

以下是 .PS1 脚本中 python 路径的简化版本,如果直接调用,它可以在命令提示符和 .PS1 文件中工作(其中 -i -o 是输入/输出路径参数)。

c:\python27\python.exe D:\PythonPPC\subs.py -i D:\PPC\subs_export.csv -o D:\PPC\subs_export_lat_lon.csv

在我的脚本中,我想将两个路径参数 -i/-o 替换为以下变量:

c:\python27\python.exe D:\PythonPPC\subs.py -i $inputPathsubs_export.csv -o $outputPathsubs_export_lat_lon.csv

有没有人知道如何调用这个命令,因为我已经尝试过堆栈和其他一些地方描述的 &$exe 方法,但这只会导致如下所示的错误:

CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

任何帮助将不胜感激。

4

2 回答 2

3

我建议使用Join-Pathcmdlet 来构建路径。它将为您省去跟踪前导/尾随路径分隔符的麻烦,并规范化/\.

$workingFolder = 'C:\some/where\'
$extractFolder = '\extract\folder'
$infileName    = '/subs_export.csv'
$outfileName   = '\subs_export_lat_lon.csv'

$infile  = Join-Path (Join-Path $workingFolder $extractFolder) $infileName
$outfile = Join-Path (Join-Path $workingFolder $extractFolder) $outfileName

结果:

PS C:\> $infile
C:\some\where\extract\folder\subs_export.csv
PS C:\> $outfile
C:\some\where\extract\folder\subs_export_lat_lon.csv

如果您仍然想简单地将字符串连接到路径,您可以通过将变量名称放在大括号之间来将变量与尾随字符串分开。在您的示例中:

python.exe D:\PythonPPC\subs.py -i "${inputPath}subs_export.csv" ...

或者

python.exe D:\PythonPPC\subs.py -i "${rootFolder}${subFolder}subs_export.csv" ...
于 2013-07-02T10:49:50.217 回答
0

在从不同的方向攻击问题和一位同事指出我自己的愚蠢之后,以下似乎是对上述复杂问题的一个相当简单的解决方案。

$inputFilePath = $pathToWorkingFolder + $pathToExtractFolder + 'subs_export.csv'
$outputFilePath = $pathToWorkingFolder + $pathToExtractFolder +'subs_export_lat_lon.csv'    
c:\python27\python.exe D:\PythonPPC\subs.py -i $inputFilePath -o $outputFilePath

我猜只是需要一些同行评审...

于 2013-07-02T09:30:23.950 回答