![使用变量路径通过 powershell 导入 CSV](https://linux22.com/image/1355394/%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F%E8%B7%AF%E5%BE%84%E9%80%9A%E8%BF%87%20powershell%20%E5%AF%BC%E5%85%A5%20CSV.png)
我正在尝试使用 powershell 将 CSV 文件导入数据库中,并在变量中定义路径。但似乎不起作用。
$path = "C:\Users\Admin\Desktop\TestFolder\file.txt"
Import-CSV -Header ("header1","header2","header3") -Path $path
上面的方法不起作用,我不知道为什么。如果我打印,$path
我确实会得到正确的路径,如果我Import-CSV
直接在路径中运行,它也能正常工作。
Write-Host $path
C:\Users\Admin\Desktop\TestFolder\file.txt
Import-CSV -Header ("header1","header2","header3") -Path C:\Users\Admin\Desktop\TestFolder\file.txt
header1 test123
header2 test345
header3 test567
header1 test789
header2 test901
header3 test123
etc...
使用 Windows Server 2012 Standard 和 PowerShell 2。
任何帮助都值得赞赏,
谢谢
编辑:
我的完整代码如下这,但这不起作用。我试图用 PowerShell 监视一个文件夹,然后将其导入 SQL Server 2012。文件夹监视工作正常,但我似乎无法使导入工作。我认为问题出在$DataImport
,因此我回到基础来找出问题所在。我尝试了如上所述的最基本的设置,Import-CSV
但这(在其简单版本中)不起作用。所以我认为我使用Import-CSV
错了。
答案1
pastebin 似乎已被删除,因此我无法对完整脚本发表评论。但是,您可能想尝试以下操作:
- 对于脚本中用作参数的任何纯文本字符串,请使用单引号
' '
。 - 对于包含用作脚本参数的变量的任何字符串,请使用双引号
" "
。
例如,您在问题中给出的前两个命令行应该是:
$path = 'C:\Users\Admin\Desktop\TestFolder\file.txt'
Import-CSV -Header ('header1','header2','header3') -Path "$path"
答案2
请尝试以下方法:
foreach($file in dir $CodesetBulkLoadLocation -Recurse -Include @("*.csv"));
{
#$files = @{
#'ICD10' = @{ 'EDIT_FUNCTION'='UCM-REPT-TEEN-PREG-DIAG'; 'TABLE_FUNCTION'='UCM-REPT'; 'CODE_FUNCTION' = 'I0' }
#}
#foreach($file_desc in $files.GetEnumerator())
#{
$filename = $file_desc.Key
$edit_func = $file_desc.Value.EDIT_FUNCTION
$table_func = $file_desc.Value.TABLE_FUNCTION
$code_func = $file_desc.Value.CODE_FUNCTION
$filePath = "C:\jobs\AA\DEV6\UCM\${filename}.csv"
$importFile = Import-CSV $filePath
foreach($item in $importFile)
{
$proc1 = $item.DIAG_NBR
$proc2 = $item.DIAG_NBR
# $ymdeff = $item.YMDEFF
#$ymdend = $item.YMDEND
#$ymdtrans = $item.YMDTRANS
Write-Verbose "$proc1, $proc2"
$currentDate = Get-Date -Format yyyyMMdd
# *******************************************************************************
# * Insert codes and fees into the su_edit_detail.
# *******************************************************************************
'{0,-60}{1,20}' -f "Insert TEEN PREGNANCY ICD9 AND ICD10 CODES into the su_edit_detail ",(Get-Date -Format yyyyMMdd:hhmmss);
$myQuery = @"
SET PAGES 600;
SET LINES 4000;
SET ECHO ON;
SET serveroutput on;
WHENEVER sqlerror exit sql.sqlcode;
insert into SU_EDIT_DETAIL(EDIT_FUNCTION, TABLE_FUNCTION, CODE_FUNCTION, CODE_TYPE,CODE_BEGIN, CODE_END, EXCLUDE, INCLUDE_X, OP_NBR, TRANSCODE, VOID, YMDEFF, YMDEND, YMDTRANS)
select '$edit_func','$table_func','$code_func','DIAG','$proc1','$proc2',' ',' ','MIS', 'C',' ',20141001, 99991231, 20131120
from dual where not exists(select * from SU_EDIT_DETAIL where (EDIT_FUNCTION = '$edit_func' and TABLE_FUNCTION = '$table_func' and CODE_BEGIN='$proc1' and CODE_END='$proc2'));
commit;
"@
$null = Invoke-SqlPlus -MessageOnFail 'Insert into su_edit_detail failed' -Query $myQuery;
}
}
}