转换文件夹中文件的列表...将逗号分隔为管道分隔

时间:2019-05-24 11:26:52

标签: windows batch-file

我正在编写Windows批处理脚本,以将管道定界文件转换为逗号定界。当我为单个文件运行它时,它会进行转换,但是当我为文件夹中的文件运行它时,它不会。

我已经为单个文件编写了代码,但是它没有遍历文件夹。


@echo off

set "INPUT=%C:\temp\source\*.csv"
set "OUTPUT=%C:\temp\dest\"

setlocal EnableExtensions DisableDelayedExpansion



> "%OUTPUT%" (
for %%F in (%*) do
(
    delims^=^ eol^= %%L in ("%INPUT%") do (
        set "LINE=%%L"
        setlocal EnableDelayedExpansion
        echo(!LINE:^|^=,!
        endlocal
    )
)
)
endlocal
exit /B

我想对文件夹中的所有文件运行脚本

1 个答案:

答案 0 :(得分:1)

这是我的两个基于的评论,并扩展为多个文件:

$folderPath = 'C:\temp\source\'
$folderPathDest = 'C:\temp\dest\'
Get-ChildItem $folderPath -Name -Filter *.csv |
ForEach-Object {
    $filePath = $folderPath + $_
    $filePathdest = $folderPathDest + $_
    Import-Csv -Path $filePath -Delimiter '|' |
    Export-Csv -Path $filePathDest –NoTypeInformation
}
$folderPath = 'C:\temp\source\'
$folderPathDest = 'C:\temp\dest\'
# As the pipe is a special character we need to escape it with a backslash
$stringToReplace = '\|'
$stringToAdd = ','
Get-ChildItem $folderPath -Name -Filter *.csv |
ForEach-Object {
    $filePath = $folderPath + $_
    $filePathdest = $folderPathDest + $_
    (Get-Content -Path $filePath) -Replace $stringToReplace,$stringToAdd |
    Set-Content -Path $filePathdest
}

在后者中,如果使用 +,则还可以在-Raw中加入Get-Content选项,即(Get-Content -Path $filePath -Raw)