我正在尝试在 powershell 中编写一个脚本来删除文件夹中每个 MP3 文件名的前 20 个字符,我创建了一个文件“test.ps”并将下面的 powershell 代码插入其中,
gci *.mp3 | rename-item -newname { [string]($_.name).substring(20) }
当我在 powershell.exe 中运行此文件时,没有任何反应,
任何人都可以帮忙吗?谢谢。
我正在尝试在 powershell 中编写一个脚本来删除文件夹中每个 MP3 文件名的前 20 个字符,我创建了一个文件“test.ps”并将下面的 powershell 代码插入其中,
gci *.mp3 | rename-item -newname { [string]($_.name).substring(20) }
当我在 powershell.exe 中运行此文件时,没有任何反应,
任何人都可以帮忙吗?谢谢。
这可能会让你开始。(可能有更简洁的方法,但是当您以后需要维护它时,这是可行的并且是可读的。:-))
我创建了一个文件夹C:\TempFiles
,并在该文件夹中创建了以下文件:
TestFile1.txt
TestFile2.txt
TestFile3.txt
TestFile4.txt
(恐怕我是用老式的方式创建它们的。<g>。我用过
for /l %i in (1,1,4) do echo "Testing" > TestFile%i.txt
从实际的命令提示符。)
然后我从开始菜单打开PowerShell ISE
,运行这个脚本。它创建一个数组 ( $files
),只包含文件的名称,并处理每个文件:
cd \TempFiles
$files = gci -name *.txt
foreach ($file in $files) {
$thename = $file.substring(4);
rename-item -path c:\TempFiles\$file -newname $thename
}
这留下了包含以下内容的文件夹:
File1.Txt
File2.Txt
File3.Txt
File4.Txt
File5.Txt
为了从命令行运行脚本,您需要更改一些默认的 Windows 安全设置。您可以通过使用PowerShell ISE
的帮助文件(从菜单中)并搜索或从提示中about_scripts
执行来了解它们。请参阅帮助文件中的小节(它更容易阅读)。help about_scripts
ISE
How To Run A Script
您的代码确实有效。两件事情...
test.ps1
.Get-ChildItem
它将在当前目录中运行。我通过制作一堆这样的 mp3 文件来测试你的产品线 -
1..30 | % { new-item -itemtype file -Name (
$_.ToString().PadLeft(30, 'A') + ".mp3" )}
我会使用更“更安全”的方式(如果文件名短于所讨论的长度,则会出现错误,您还将文件扩展名作为总字符的一部分)。检查每个文件的基本名称是否大于 21 个字符(如果删除前 20 个字符,名称仍然可以是一个字符长)。如果删除前 20 个后目录包含同名文件,则可能会失败,您可以自行进一步开发):
gci *.mp3 | foreach{
if($_.BaseName.Length -ge 21)
{
$ext = $_.Extension
$BaseName = $_.BaseName.Substring(20)
Rename-Item $_ -NewName "$BaseName$ext"
}
}
// 删除(替换为空字符)所有以“dbo”开头的文件名中的前 20 个字符。// 电源外壳
Get-ChildItem C:\my_dir\dbo -Recurse -Force -Filter dbo.* | Where-Object {!$_.PSIsContainer} | Rename-Item -NewName { ($_.name).Substring(20) }