Powershell脚本,用于在循环中复制和重命名文件

use*_*201 2 powershell file-rename

我的Prevalidation文件夹中有许多扩展名为.psa的文件,我想:

  1. 将它们一个一个地复制到我的工作文件夹中
  2. 将.psa文件重命名为psaload.csv
  3. 对文件运行一组命令,将其加载到我的数据库
  4. 然后从我的工作文件夹中删除csv文件.

对于源文件夹中的所有.psa文件,将重复此操作.

因此,问题是我如何在循环中执行与当前一样多的.psa文件的命令集.

这是我的Prevalidation文件夹中只有一个文件的代码测试 -

Copy-Item  C:\Downloads\PreValidation\*.psa C:\Downloads\Validation\WIP
Rename-Item 'C:\Downloads\Validation\WIP\abc 1234.psa' 'psaload1.csv'

Get-Content C:\Downloads\Validation\WIP\psaload1.csv | ForEach-Object { $_.replace("\,"," ") } | Set-Content C:\Downloads\Validation\WIP\psaload.csv

Remove-Item C:\Downloads\Validation\WIP\psaload1.csv

<run the psaload.csv to load to my db>
Run Code Online (Sandbox Code Playgroud)

这是我打算做的 -

考虑我的C:\ Downloads\Prevalidation文件夹中的多个.psa文件.

For each C:\Downloads\PreValidation\*.psa

BEGIN LOOP

Copy-Item  C:\Downloads\PreValidation\aaaa.psa C:\Downloads\Validation\WIP\aaaa.psa
Rename-Item 'C:\Downloads\Validation\WIP\aaaa.psa' 'psaload1.csv'

Get-Content C:\Downloads\Validation\WIP\psaload1.csv | ForEach-Object { $_.replace("\,"," ") } | Set-Content C:\Downloads\Validation\WIP\psaload.csv

Remove-Item C:\Downloads\Validation\WIP\psaload1.csv


END LOOP
Run Code Online (Sandbox Code Playgroud)

我正在寻找语法来为我/ prevalidation文件夹中的每个文件逐个运行这些命令集.

Joe*_*oey 5

由于所有其他答案都是相当可怕的代码而不是非常惯用的PowerShell,这是我的看法(尽管未经测试):

# Get all .psa files
Get-ChildItem C:\Downloads\PreValidation\*.psa |
   ForEach-Object {
      # Load the file's contents, replace commas with spaces
      (Get-Content $_) -replace ',', ' ' |
         # and write it to the correct folder and file name
         Out-File C:\Downloads\WIP\psaload.csv

      # I guess you'd run whatever you're doing against the file here,
      # not after the loop

      Remove-Item C:\Downloads\WIP\psaload.csv
   }
Run Code Online (Sandbox Code Playgroud)

  • PowerShell要记住两件事:你有一个管道,你正在传递物体.两者都可以让你编写更好的代码,看起来不像Java来访问和穿上Perl的鞋子. (2认同)