我有这个脚本定期运行以收集桌面文件,并按文件类型将它们组织到备份驱动器上的单个文件夹中。
function get-destbytype($ext)
{
switch ($ext)
{
{ $ext -match '(jpg|png|gif|bmp)'} { "images" }
{ $ext -match '(divx|mpeg|avi)'} { "videos" }
{ $ext -match '(cs|js|java|py|class|vbs|jsp)'} { "code" }
{ $ext -match '(sql|ps1|pl|py)'} { "scripts" }
{ $ext -match '(zip|7z|rar)'} { "compressed" }
{ $ext -match '(ppt|pptx|doc|docx|pdf)'} { "documents" }
{ $ext -match '(csv|xls|xlsx)'} { "spreadsheets" }
{ $ext -match '(exe|dll|jar|ear|bat|cmd)'} { "executables" }
{ $ext -match '(txt|log)'} { "text" }
{ $ext -match '(msg|htm|html|lnk)'} { "miscellaneous" }
{ $ext -match '(properties|xml|ini)'} { "config" }
default {"$ext" }
}
}
$dirtyfolder = "C:\Documents and Settings\user\Desktop\"
$org = "$nas\Desktop\ORG"
ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
$dest = "$($org)\$(get-destbytype $_.extension)"
if (! (Test-Path -path $dest ) )
{
write-host "creating $dest"
new-item $dest -type directory
}
mv -path $_ -destination $dest
}
脚本经过彻底测试,在我能想象的大多数情况下似乎运行良好。最近,当第一次遇到.csv
个文件时,它们被移动到一个名为
code spreadsheets
。
这显然是因为.cs
文件应该转到code
文件夹而.csv
文件转到spreadsheets
文件夹,并且脚本不区分.cs
和.csv
。
如何修改脚本以不执行此操作?
还可以做些什么来排除扩展名为.lnk
的桌面快捷方式?
答案 0 :(得分:3)
尝试使用更具体的正则表达式。只需在表达式的末尾添加$符号即可。 $符号表示行尾或您的字符串结尾。
看起来像这样:
{ $ext -match '(jpg|png|gif|bmp)$'} { "images" }
您可以通过打开PowerShell并输入以下内容来轻松测试:
"abc.csv" -match '(cs|xls)$'
这将导致错误。
答案 1 :(得分:3)
另一个最佳做法是在每个条件结束时添加一个break语句。也就是说,当找到匹配时,不测试所有其他条件。它还可以使比较更快。
{ $ext -match '(jpg|png|gif|bmp)$'} { "images"; break}
答案 2 :(得分:2)
更具体的正则表达式是一种可能的解决方案。更方便处理器的是将switch语句从最大特定到最不具体,并在每个case之后包含一个'break'指令。这样,当你匹配“csv”时,它将退出评估其他情况。
您的错误输出是两种情况匹配并返回两个值的结果。更严格的正则表达式只会导致一个案例匹配,但是当你可能既没有意义也没有意识到这种情况发生时,你仍在评估每个元素。在每种情况下使用break指令是一种不那么模糊并节省几个周期的方法。
答案 3 :(得分:0)
您可以在ls的参数中添加快捷方式的例外。
$(function(){
$('select[name=countryId]').on('change',function(){
$('select[name=stateId]').html('');
$.ajax({
url: 'controller_name/get_state?countryId='+$(this).val(),
type: "GET",
}).done(function(data) {
$('select[name=stateId]').html(data);
}).fail(function() {
}).always(function() {
});
});
});