我想使用PowerShell删除目录中文件名中的所有字符,包括第一个-
字符,包括第一个字符。示例文件名是:batch orders October 17 - 16278856 - all orders October 17-18.pdf
我只想删除第一行中的所有内容,因此上面的名称将更改为:16278856 - all orders October 17-18.pdf
答案 0 :(得分:1)
使用-replace
运算符。
'foo - bar - baz.pdf' -replace '^[^-]*-\s*'
^
匹配字符串的开头。 [^-]*
匹配任意数量的非连字符。 -\s*
与文字连字符匹配,后跟任意数量的空格字符。
在不使用替换值的情况下调用-replace
会删除匹配的子字符串。
答案 1 :(得分:1)
要真正重命名文件,您可以执行类似操作(使用先前的搜索答案)
foreach ($file in (get-childitem *.pdf).name) {
Rename-Item $file ($file -replace '^[^-]*-\s*')
}
仅供参考,这仅适用于您当前所在的目录...
这是做什么的?
Foreach
这是一个循环。 $ file 只是一个变量,可以是任何变量-必须以 $
开头(get-childitem * .pdf).name)只是获得所有文件名的列表,包括当前文件夹中的扩展名,它将被放入 $ file
循环将遍历每个名称,一次一次
重命名项只是重命名文件,并且必须紧跟着“重命名的内容”,然后是“要命名的名称”
在这里, $ file 只是每个文件名
($ file -replace'^ [^-] -\ s ')只是告诉它新名称,它本身减去开头。
在正则表达式中,第一个 ^ 代表该行的开头。那么 [^-] 意味着要加上连字符,最后 * 意味着要重复该字符搜索,直到找到另一个字符(可能是连字符)为止。那么-\ s * 表示连字符,后跟空格。
使用 {} 括号定义必须循环通过的foreach循环脚本。