如何在文件夹中包含Powershell进程文件并传递带变量的CMD命令

时间:2013-06-03 17:57:34

标签: powershell cmd

我正在编写一个Powershell脚本,它将获取用户指定文件夹中的所有文件,并将它们逐个传递给命令行,然后命令行将生成的文件(.CSVs)转储到另一个用户指定的文件夹中。我正在尝试使用与原始文件相同的CSV文件名。该命令必须从特定文件夹(C:\ Program Files(x86)\ Reporter)执行。

这是我到目前为止所做的,但我似乎无法使任何工作超过write-host - 对于循环,迭代,字符串,你的名字,Powershell和我不是bueno。

pushd "C:\Program Files (x86)\Reporter\"

$filename = read-host "Enter the complete path of Original files"
$csvfiles = read-host "Enter the complete path for the CSVs"
write-host $filename
write-host $csvfiles
$reporter = "reporter.exe /rptcsv", $filename + ".csv", $filename

[$filename.string]::join(" ",(gci))

命令行命令必须为program.exe /rptcsv <file being created> <file being used>。我需要它一次处理一个,在处理第二个之前等待前一个完成。原始文件的数量会有所不同,所以我只需要它来处理它们,它们都已经完成了。我已经完成了批处理文件和一些Python,但从未使用过Powershell。我以前在Python中做过这个,只是被告知现在我们需要Powershell而不是 - 这是我第一次进入Powershell,而且这是一个很糟糕的事情。可以这样做吗?

编辑:回答!!

这是工作代码:

pushd "C:\Program Files (x86)\Reporter"

$src = read-host "Enter the complete path of the folder with original files"
$dst = read-host "Enter the complete path of the folder for the CSVs"
write-host $src
write-host $dst
$reporter = 'reporter.exe /rptcsv'

Get-ChildItem $src | % {
  $outfile = Join-Path $dst ($_.Name + ".csv")
  cmd /c $reporter $outfile $_.FullName
}

1 个答案:

答案 0 :(得分:1)

只要reporter.exe不是异步运行(即在后台处理文件时不立即返回),这样的事情应该有效:

pushd "C:\Program Files (x86)\Reporter"

$src = read-host "Enter the complete path of the folder with original files"
$dst = read-host "Enter the complete path of the folder for the CSVs"
write-host $src
write-host $dst

Get-ChildItem $src | % {
  $outfile = Join-Path $dst ($_.Name + ".csv")
  reporter.exe /rptcsv $outfile $_.FullName
}