我有一个powershell脚本,可以在将文件从dev复制到根文件夹后更改文件扩展名等。我已经成功复制了这些文件。但是,我在使用-Recurse(适用于所有子文件夹(我想要排除dev文件夹))或仅将代码应用于eoot文件夹之间陷入困境。
CODE:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "$w = $args[0];foreach ($file in Get-ChildItem -Recurse -Path "$w" -Exclude *.bat, *.txt, *.png, *.jpg, *.jpeg, *.gif, *.mp3, *.mp4, dev\\*) {"$w+$file";(Get-Content $w$file).replace('dev/', '') | Set-Content "$w$file";(Get-Content $w$file).replace('.min.js', '.minjs') | Set-Content "$w$file";(Get-Content $w$file).replace('.json', '.xson') | Set-Content "$w$file";(Get-Content $w$file).replace('https://www.google-analytics.com/analytics.js', '/httpswgacanalyticsjs/') | Set-Content "$w$file";(Get-Content $w$file).replace('.js', '.min.js') | Set-Content "$w$file";(Get-Content $w$file).replace('.minjs', '.min.js') | Set-Content "$w$file";(Get-Content $w$file).replace('.xson', '.json') | Set-Content "$w$file";(Get-Content $w$file).replace('/httpswgacanalyticsjs/', 'https://www.google-analytics.com/analytics.js') | Set-Content "$w$file";(Get-Content $w$file).replace('.min.css', '.mincss') | Set-Content "$w$file";(Get-Content $w$file).replace('.css', '.min.css') | Set-Content "$w$file";(Get-Content $w$file).replace('.mincss', '.min.css') | Set-Content "$w$file";};Write-Host ".""" "%path%"
INPUT:
FOLDER
-> dev
->files
->folders
输出:
FOLDER
-> dev //exclude
->files //exclude
->folders //exclude
->files //execute code on this
->folders //execute code on this
答案 0 :(得分:0)
我没有对此进行过测试,所以我完全偏离了理论,但以下内容可能会对我所理解的内容有所帮助。
添加如下内容:
$filesToRecurse = Get-ChildItem -Path {pathToFileToRecurse} -Exclude {pathToFolderToExclude} | where {! $_.PSIsContainer}
然后使用$ filesToRecurse变量来执行重命名的文件列表,因为它不包含您要排除的文件或文件夹。
注意:如果要排除多个位置等,也可以创建和使用数组变量。
答案 1 :(得分:0)
尝试类似这样的东西(PowerShell v5 for use -file选项)
$w = "c:\temp\";
$exclude=@("*.bat", "*.txt", "*.png", "*.jpg", "*.jpeg", "*.gif", "*.mp3", "*.mp4")
$hashreplace = @{}
$hashreplace.'dev/'= ''
$hashreplace.'.min.js'= '.minjs'
$hashreplace.'.json'= '.xson'
$hashreplace.'https://www.google-analytics.com/analytics.js'= '/httpswgacanalyticsjs/'
$hashreplace.'.js'= '.min.js'
$hashreplace.'.minjs'= '.min.js'
$hashreplace.'.xson'= '.json'
$hashreplace.'/httpswgacanalyticsjs/'= 'https://www.google-analytics.com/analytics.js'
$hashreplace.'.min.css'= '.mincss'
$hashreplace.'.css'= '.min.css'
$hashreplace.'.mincss'= '.min.css'
foreach ($file in Get-ChildItem -Recurse -File -Path "$w" -Exclude $exclude | where {$_.fullname -notlike "*\dev\*"})
{
$text=(Get-Content $file.FullName)
$hashreplace.Keys | %{ $text = $text.Replace($_, $hashreplace[$_])}
$text | set-content $file.FullName
};