如何仅从 csv 文件中获取所选元素的值,但从不同的列中获取?
How do I get from a csv file only the value of the selected element, but from a different column?
我有这个 csv 文件示例:
NAME
PATH
file 1
C:\path1
file 2
C:\path2
file 3
C:\path3
我还有一个包含文件的原始文件夹。这里的想法是查看 CSV 文件中的文件是否存在于文件夹中以及 csv 文件中定义的目标路径中。如果它们不存在,则无事可做。如果它们存在,脚本需要将它们复制到 csv 文件的值 PATH 中定义的路径中。所以它基本上会重写现有文件。
我真的希望问题的定义很清楚。到目前为止我所拥有的是:
$filesInfo = @(Import-Csv C:\files.csv)
$files = $filesInfo.NAME
$paths = $filesInfo.PATH
foreach ($file in $files){
$isThereOrigin = Test-Path -Path "C:\folder$file"
if ($isThereOrigin){
foreach ($path in $paths) {
$isThereDestination = Test-Path -Path "$path$file"
if ($isThereDestination){
Copy-Item -Path "C:\folder$file" -Destination $path
}
}
}
}
所以,基本上,我试图用这段代码做的是,首先我尝试查看该文件是否存在于原始文件夹中。如果那里有文件,我会查看是否有目标(因为目标文件可能不存在)。如果两个条件都为真,则复制文件。这工作正常。
但是,有时此代码不起作用。假设 file2
包含在 path1
和 path2
中。使用我现在拥有的代码,file2 将被复制到 path1
和 path2
中,我不希望这样。我希望 file2
在 csv 文件中定义的路径中仅被复制 。
我希望一切都清楚。谢谢!
你的错误在于将 row-like 个对象的原始数组拼接成两个单独的数组:
$files = $filesInfo.NAME
$paths = $filesInfo.PATH
相反,遍历原始 $filesInfo
数组:
foreach ($fileInfo in $filesInfo){
$fileName = $fileInfo.NAME
$isThereOrigin = Test-Path -LiteralPath "C:\folder$fileName"
if($isThereOrigin){
$path = $fileInfo.PATH
$isThereDestination = Test-Path -LiteralPath "$path$fileName"
if($isThereDestination){
Copy-Item -LiteralPath "C:\folder$fileName" -Destination $path -Force
}
}
}
我有这个 csv 文件示例:
NAME | PATH |
---|---|
file 1 | C:\path1 |
file 2 | C:\path2 |
file 3 | C:\path3 |
我还有一个包含文件的原始文件夹。这里的想法是查看 CSV 文件中的文件是否存在于文件夹中以及 csv 文件中定义的目标路径中。如果它们不存在,则无事可做。如果它们存在,脚本需要将它们复制到 csv 文件的值 PATH 中定义的路径中。所以它基本上会重写现有文件。
我真的希望问题的定义很清楚。到目前为止我所拥有的是:
$filesInfo = @(Import-Csv C:\files.csv)
$files = $filesInfo.NAME
$paths = $filesInfo.PATH
foreach ($file in $files){
$isThereOrigin = Test-Path -Path "C:\folder$file"
if ($isThereOrigin){
foreach ($path in $paths) {
$isThereDestination = Test-Path -Path "$path$file"
if ($isThereDestination){
Copy-Item -Path "C:\folder$file" -Destination $path
}
}
}
}
所以,基本上,我试图用这段代码做的是,首先我尝试查看该文件是否存在于原始文件夹中。如果那里有文件,我会查看是否有目标(因为目标文件可能不存在)。如果两个条件都为真,则复制文件。这工作正常。
但是,有时此代码不起作用。假设 file2
包含在 path1
和 path2
中。使用我现在拥有的代码,file2 将被复制到 path1
和 path2
中,我不希望这样。我希望 file2
在 csv 文件中定义的路径中仅被复制 。
我希望一切都清楚。谢谢!
你的错误在于将 row-like 个对象的原始数组拼接成两个单独的数组:
$files = $filesInfo.NAME
$paths = $filesInfo.PATH
相反,遍历原始 $filesInfo
数组:
foreach ($fileInfo in $filesInfo){
$fileName = $fileInfo.NAME
$isThereOrigin = Test-Path -LiteralPath "C:\folder$fileName"
if($isThereOrigin){
$path = $fileInfo.PATH
$isThereDestination = Test-Path -LiteralPath "$path$fileName"
if($isThereDestination){
Copy-Item -LiteralPath "C:\folder$fileName" -Destination $path -Force
}
}
}