Написал PS-скрипт, который читает файл .ini по определенным параметрам для копирования файлов из папки_a в папку_b,c ..и так далее. Я получаю страшное "
Не могу найти диск. Диска с именем «C» не существует».
Я пробовал морковь, цитаты, но безуспешно. Непонятно, что является причиной сбоя. Мне любопытно, почему перед диском «C» ставится пробел, если файл .ini этого не содержит.
# Load the contents of the abc_derp.ini file
$iniContent = Get-Content "C:\cfg\abc_derp.ini" -Raw | ConvertFrom-StringData
# Get values from the abc_derp.ini file
$amount = [int]$iniContent["AMT"]
$partialNames = $iniContent["PTN"] -split ";"
$sourceDirectory = $iniContent["SRC"]
$targetDirectories = $iniContent["TRG"] -split ";"
$logFile = $iniContent["LOG"]
# Create log file with timestamp
$logFileName = "log_$(Get-Date -Format yyyy-MM-dd-HHmmss).txt"
$logFilePath = Join-Path $sourceDirectory $logFileName
foreach ($partialName in $partialNames) {
$filesToCopy = Get-ChildItem -Path $sourceDirectory -Filter "*$partialName*" -File | Select-Object -First $amount
foreach ($targetDirectory in $targetDirectories) {
foreach ($fileToCopy in $filesToCopy) {
$destinationPath = Join-Path $targetDirectory $fileToCopy.Name
Copy-Item -Path $fileToCopy.FullName -Destination $destinationPath
$logMessage = "Copied $($fileToCopy.FullName) to $destinationPath"
$logMessage | Out-File -FilePath $logFilePath -Append
}
}
}
Вот содержимое файла .ini, считываемое сценарием.
AMT=300
PTN=BURGERS_A; ALIENS_A
SRC=C:\\base\\test\\source
TRG=C:\\base\\test\\dest1; C:\\base\\test\\dest2
LOG=C:\\base\\log
@Каз Бриллиант! Позвольте мне попробовать!
Вы можете использовать функцию обрезки().
# Get values from the abc_derp.ini file
$amount = [int]$iniContent["AMT"]
$partialNames = $iniContent["PTN"].Split(";").Trim()
$sourceDirectory = $iniContent["SRC"].Trim()
$targetDirectories = $iniContent["TRG"].Split(";").Trim()
$logFile = $iniContent["LOG"].Trim()
Мне следовало воспользоваться своим чутьем и подрезать эту штуку. Спасибо огромное за это!
Может быть, это место?
TRG=C:\\base\\test\\dest1; C:\\base\\test\\dest2
? Тот, что после точки с запятой? ЕСЛИ вы разделите это на точку с запятой и ничего больше, вторая строка будет ` C:\\base\\test\\dest2` с ведущим пробелом. (Извините, я не знаю, как это отметить идиотскими обратными кавычками SO.)