Powershell:将文件路径指定为变量

Powershell: Specify file path as variable

我正在运行通过 powershell 脚本执行以下 SQL 查询,并且需要针对不同的文件多次 运行 该脚本。所以我想弄清楚的是当我 运行 脚本时如何将文件路径指定为变量?

update [$Db_name].[dbo].[$BatchTable]
set [$Db_name].[dbo].[$BatchTable].Wave = 'Wave1.1'
from [$Db_name].[dbo].[$BatchTable]
inner join OPENROWSET(BULK 'FilePath\file.csv',    
FORMATFILE= 'E:\import.xml') AS a
on ([$Db_name].[dbo].[$BatchTable].Name= a.Name) and  
([$Db_name].[dbo].[$BatchTable].Domain = a.Domain)

'FilePath\file.csv' 是我需要定义为变量的文件路径,以便我的代码看起来像这样:

inner join OPENROWSET(BULK '$INPUTFILEPATH',    
FORMATFILE= 'E:\import.xml') AS a

完成此任务的任何帮助或可能更好的方法都会非常有帮助。

从我希望能够 运行 脚本这样的命令:

CMD: updatescript.ps1 $INPUTFILEPATH = C:\Documents\myfile.csv

同样,我不确定这是解决此问题的最佳方法吗?

您可以使用 param.

将命令行参数传递给 powershell 脚本

示例:

param(
   [string]$INPUTFILEPATH
)

然后调用脚本如下:

updatescript.ps1 -INPUTFILEPATH C:\Documents\myfile.csv

可以找到有关 cmd 行参数的更多详细信息here

你快到了。 您需要在脚本的开头添加一个参数块,例如

Param( 
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType 'leaf'})]  
[string] $InputFilePath  
)

这将创建一个强制(非可选)字符串参数,称为 InputFilePathValidateScript 是用于验证参数的代码,在这种情况下使用 [=15 检查文件是否存在=] cmdlet 和叶子的路径类型(如果检查目录是否存在,请使用 'container')。

当 运行 您的脚本使用以下语法时:

updatescript.ps1 -INPUTFILEPATH "C:\Documents\myfile.csv"

并在脚本中使用变量作为路径,与您的问题完全相同:

inner join OPENROWSET(BULK '$INPUTFILEPATH',    
FORMATFILE= 'E:\import.xml') AS a

注意: 在 powershell 中使用参数时,当 运行 脚本时,您只需要使用最少的字符来唯一标识该参数与所有其他参数您的参数块 - 在这种情况下 -I-InputFilePath.

一样有效