我在几个目录中有几百个文档。它们都有一个共同的命名结构,但值不同:
10_03022014_229_14_12-9663 5930 4454.pdf
10_03022014_230_19_4-574 1564 1452 177.pdf
我尝试做的是根据此数据创建CSV,删除一些空格,并删除PowerShell中的PDF文件扩展名。最终结果看起来像这样:
10,03022014,229,14,12,966359304454
10,03022014,230,19,4,57415641452177
除最后一个条形码数据外,所有这些值都是字母数字。
为了让自己更复杂,我需要让输出文件具有类似的命名结构,基于前两个“值”,后跟日期和时间戳。
如果目录中的文件以10_03022014_datestamp_timestamp.csv
开头,则示例为10_02022014
。
非常感谢任何建议!
答案 0 :(得分:2)
另一种解决方案:
#Get pdf-files
Get-ChildItem -Filter "*.pdf" |
#Group files that belong to the same csv-file
Group-Object -Property @{e={$_.BaseName.Split("_")[0,1] -join ("_")}} |
#Foreach csv-group
ForEach-Object {
#Generate csv-filename
$path = "$($_.Name)_$((Get-Date).ToString("MMddyyyy_HHmm")).csv"
#Format content and save
$_.Group | % { $_.BaseName -replace " " -replace '[-_]',"," } | Set-Content -Path $path
}
答案 1 :(得分:1)
文件名处理似乎很简单。我相信你只是用逗号替换下划线,连字符并从文件的基本名称中删除空格。以下内容应该为您提供重新格式化的字符串,至少按照您提供的两个值:
Get-ChildItem -Filter '*.pdf' |
ForEach-Object { $_.BaseName -Replace '[-_]', ',' -Replace ' ', '' }
我仍然不清楚你对csv文件名的意思。一旦你澄清了这一点,我也很乐意为此提供帮助。
我认为这更接近您的目标:
# Generate '_date_time.csv' string.
$fileSuffix = "_" + (Get-Date -Format yyyyMMdd) + "_" + (Get-Date -Format HHmm) + ".csv"
Get-ChildItem -Filter '*.pdf' |
ForEach-Object {
# Get the first two tokens, underscore delimited, of PDF file name.
$filePrefix = $_.Name.Split('_')[0,1] -Join('_')
# Preform requisite replacements on PDF file name
$string = $_.BaseName -Replace '[-_]', ',' -Replace ' ', ''
# Write string out to CSV file, concat prefix/suffix to generate name.
$string | Out-File -Append -FilePath $($filePrefix + $fileSuffix)
}