Вопрос или проблема
Я пытаюсь импортировать CSV файл с помощью PowerShell в базу данных, используя путь, определенный в переменной. Но это, похоже, не работает.
$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
и т.д...
Использую Windows Server 2012 Standard и PowerShell 2.
Любая помощь будет оценена,
Спасибо
ДОПОЛНЕНИЕ:
Мой полный код выглядит как это, но это не работает. Я пытаюсь отслеживать папку с помощью PowerShell, а затем импортировать в SQL Server 2012. Отслеживание папки работает отлично, но я не могу заставить импорт работать. Я выяснил, что проблема в $DataImport
, и поэтому я вернулся к основам, чтобы выяснить, в чем проблема. Я пытался использовать очень простой вариант Import-CSV
, как упоминалось выше, но он (в своем обычном варианте, как выше) не работает… поэтому я подумал, что использую Import-CSV
неправильно.
Pastebin, похоже, был удален, поэтому я не могу прокомментировать полный скрипт. Тем не менее, вы можете попробовать следующее:
- Для любых строк, содержащих только текст и используемых в качестве параметров в вашем скрипте, используйте одинарные кавычки
' '
. - Для любых строк, содержащих переменные, которые используются в качестве параметров в вашем скрипте, используйте двойные кавычки
" "
.
Например, первые две строки команд, которые вы приводите в своем вопросе, должны быть:
$path="C:\Users\Admin\Desktop\TestFolder\file.txt"
Import-CSV -Header ('header1','header2','header3') -Path "$path"
Пожалуйста, попробуйте следующим образом:
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
# *******************************************************************************
# * Вставить коды и сборы в su_edit_detail.
# *******************************************************************************
'{0,-60}{1,20}' -f "Вставить КОДЫ ICD9 и ICD10 В TEEN PREGNANCY в 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 'Вставка в su_edit_detail не удалась' -Query $myQuery;
}
}
}
Ответ или решение
Для решения вашей задачи по импорту CSV файла с использованием PowerShell и переменной для пути, важно учитывать как синтаксис PowerShell, так и правильное использование переменных. Давайте рассмотрим все необходимые шаги и нюансы, чтобы ваш код работал корректно.
Основы работы с Import-CSV в PowerShell
Команда Import-CSV
используется для чтения CSV файлов и преобразования их в объекты PowerShell. Это позволяет вам легко манипулировать данными. Однако, если у вас возникают трудности с передачей пути к файлу через переменную, это может быть связано с разными аспектами кода.
Пример кода
Ваш первоначальный код выглядит следующим образом:
$path = "C:\Users\Admin\Desktop\TestFolder\file.txt"
Import-CSV -Header ("header1","header2","header3") -Path $path
Рекомендую внести следующие изменения:
- Убедитесь, что файл
file.txt
действительно имеет структуру CSV (например, разделитель запятые, табуляции и т.д.). - Используйте одинарные кавычки для заголовков, чтобы избежать их интерпретации как переменных.
Исправленный код
Применив рекомендации, ваш код будет выглядеть так:
$path = "C:\Users\Admin\Desktop\TestFolder\file.txt"
Import-CSV -Header ('header1', 'header2', 'header3') -Path $path
Проверка на ошибки
Если происходят ошибки, убедитесь в следующем:
- Правильность формата файла: убедитесь, что
file.txt
действительно содержит данные в формате CSV. - Отладка: добавьте вывод параметров, чтобы убедиться, что они передаются корректно.
- Права доступа: проверьте, есть ли у вас необходимые права доступа для чтения файла.
Вы можете добавить следующий код для отладки:
Write-Host "Путь к файлу: $path"
Import-CSV -Header ('header1', 'header2', 'header3') -Path $path | Format-Table
Этот код выведет путь к файлу и покажет, что возвращает команда Import-CSV
, что поможет в отладке.
Продвинутый пример
Если вы хотите более сложную обработку данных после импорта, вы можете использовать цикл foreach
для перебора строк:
$Data = Import-CSV -Header ('header1', 'header2', 'header3') -Path $path
foreach ($row in $Data) {
# Обработка данных
Write-Host "Значение 1: $($row.header1), Значение 2: $($row.header2), Значение 3: $($row.header3)"
}
Заключение
Работа с Import-CSV
в PowerShell является мощным инструментом для обработки данных. Убедитесь, что вы используете правильный синтаксис, и проверяйте данные на каждом этапе, чтобы избежать потенциальных ошибок. Если ваши проблемы сохраняются даже после выполнения данных рекомендаций, предоставьте дополнительную информацию о структуре CSV и сообщениях об ошибках, которые вы получаете, чтобы мы могли предоставить более детальную помощь.