使用Export-Csv生成CSV文件后执行Copy-Item报错:找不到名为'"C'的驱动器问题求助
解决PowerShell中Copy-Item因CSV引号导致的驱动器找不到错误
你遇到的这个问题确实和Export-Csv的默认行为有关,我来帮你拆解原因和解决办法:
问题根源
Export-Csv会遵循CSV格式规范,给每个输出字段(这里就是fullName)自动加上双引号。当你用Get-Content读取这个CSV文件时,每一行的路径是被双引号包裹的,比如:
"C:\Users\larry\Pictures\2003\example.jpg"
而且CSV的第一行是表头fullName,这一行也会被Get-Content读取到。当Copy-Item处理这些带引号的字符串时,会把"C:当成驱动器名称,自然就抛出了「找不到名为'"C'的驱动器」的错误。
三种解决办法
1. 清理CSV内容再复制
跳过CSV的表头行,同时移除每行字符串前后的双引号:
Get-Content $documents_export_file | Select-Object -Skip 1 | Foreach-Object { # 移除字符串首尾的双引号 $cleanFilePath = $_.Trim('"') Copy-Item -Path $cleanFilePath -Destination $copy_to }
2. 用Import-Csv解析CSV(推荐)
Import-Csv是PowerShell专门处理CSV文件的命令,它会自动解析字段,帮你拿到纯净的路径值,不用手动处理引号:
Import-Csv $documents_export_file | Foreach-Object { Copy-Item -Path $_.fullName -Destination $copy_to }
3. 跳过CSV直接复制(最高效)
其实你完全可以省去导出CSV的中间步骤,直接在遍历文件时完成复制,既避免了CSV的格式问题,又提升了效率:
# 输入路径 $input_path = 'C:\Users\larry\Pictures\2003' # 目标复制文件夹 $copy_to = "C:\Users\larry\Documents\Temp\ffmpeg\movies" Get-ChildItem -Attributes !Directory -Path $input_path -Recurse -Force | ForEach-Object { Copy-Item -Path $_.FullName -Destination $copy_to }
如果之后你还需要保留文件名列表的CSV文件,方法2依然是最稳妥的选择,它能正确处理CSV格式的内容,不会出现引号或表头的问题。
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

