重命名文件Powershell看不到
本文关键字:看不到 Powershell 文件 重命名 | 更新日期: 2023-09-27 18:21:22
我有一个文件夹,里面有8000多个图像,它们不是通常的格式,扩展名是数字0-9。这是由卡ID系统使用的。每个图像都有一个文件名,该文件名是一个数字,扩展名是每个图片的UID的一部分。我需要循环浏览每个图像的副本,去掉前导零,删除数字扩展名前的".",并在末尾添加.jpg。我复制这些图像没有问题。我试着使用powershell,但即使在导入每个图像后,powershell也能看到它们,但当我尝试重命名时,我得到一个错误,即文件不存在。我很想听听谁可能有更好的方法使用C,VBS,甚至命令行。只要帮助我开始,如果我可以循环通过哪怕2个图像,我认为我可以继续。我确实有一个visualbasic访问程序来完成这项工作,但新进程将驻留在没有access或任何其他微软办公工具的服务器上。
这是我尝试使用的代码
$target = "C:'Onecard'Onecard'onecard'"
$Filelist = gci $target
ForEach($i iN $Filelist){
$BASENAME = ($i.BaseName).TRIMSTART("0")
REN $i "$($BASENAME)"
}
这样的东西适合你的需求吗?
$target = "C:'Onecard'Onecard'onecard'"
Get-ChildItem $target | ForEach-Object{
$newName = ($_.Name -replace "'.").TrimStart("0") + ".jpg"
Rename-Item $_.FullName -NewName $newName
}
你说你需要更改像这个这样的项目
00000000.1 > 1.jpg
88012345.4 > 880123454.jpg
代码所要做的是获取每个文件并使用全名,即:00000000.1删除句点、前导零并附加.jpg扩展名。这应该会产生所需的结果。我敦促你先用文件副本来测试一下。
replace命令使用regex,因此需要转义句点。
您需要确保您(或运行PS脚本的任何凭据)对有问题的目录具有适当的权限(遍历、查看内容、重命名等)。
这个小小的C#控制台应用程序应该可以做到这一点(未经测试):
static int Main( string[] args )
{
DirectoryInfo srcDir = new DirectoryInfo( args[0] ) ;
DirectoryInfo tgtDir = new DirectoryInfo( args[1] ) ;
if ( !srcDir.Exists ) throw new ArgumentException() ;
if ( !tgtDir.Exists )
{
tgtDir.Create() ;
}
//
// make sure we've got rights on the source directory
//
FileIOPermissionAccess srcRights = FileIOPermissionAccess.PathDiscovery
| FileIOPermissionAccess.Read
;
FileIOPermission srcPermission = new FileIOPermission( srcRights , srcDir.FullName ) ;
try
{
srcPermission.Demand() ;
}
catch ( SecurityException )
{
Console.WriteLine("Insufficient rights on source: {0}" , srcDir.FullName ) ;
Environment.Exit(1) ;
}
//
// make sure we've got rights on the target directory
//
FileIOPermissionAccess tgtRights = FileIOPermissionAccess.AllAccess ;
FileIOPermission tgtPermission = new FileIOPermission( tgtRights , tgtDir.FullName ) ;
try
{
tgtPermission.Demand() ;
}
catch ( SecurityException )
{
Console.WriteLine("Insufficient rights on destination: {1}" , tgtDir.FullName ) ;
Environment.Exit(1) ;
}
//
// lets do the copy
//
Regex rxFileName = new Regex( @"^(?<stem>[0-9]+)'.(?<ext>[0-9]$" , RegexOptions.ExplicitCapture ) ;
foreach ( FileInfo fi in srcDir.EnumerateFiles( "*.*" , SearchOption.TopDirectoryOnly ) )
{
Match m = rxFileName.Match( fi.Name ) ;
if ( !m.Success ) continue ;
string stem = m.Groups["stem"].Value ;
string ext = m.Groups["ext"].Value ;
string newName = stem + ext + ".jpg" ;
string newPath = Path.Combine( tgtDir.FullName , newName ) ;
fi.CopyTo( newPath , true ) ;
}
return 0 ;
}
您可以避免使用循环:
$target = "C:'Onecard'Onecard'onecard'"
Get-ChildItem $target | ren -new { ($_.Name -replace "'.").TrimStart("0") + ".jpg"}
Import-Module PSimagetools
Import-Module powershellPack
TRY{
$dir = "E:'SSIS'OneCard'OneCard'Images'"
Get-ChildItem -Path $dir -Include *.* -Recurse | foreach { $_.Delete()}
RoboCopy ''machias'Onecard'Onecard'PICTURES E:'SSIS'OneCard'OneCard'Images' *.0 *.1 *.2 *.3 *.4 *.5 *.6 *.7 *.8 *.9 /XD /njh /njs /xf *.jpg *.zip
$Filelist = gci $Dir -Exclude *.jpg
foreach($File in $Filelist)
{
Write-Verbose "Working on $file"
$baseName = ($file.Name).Replace(".","").TrimStart("0")
ren $file "$($baseName).jpg"
}
gci 'E:'SSIS'OneCard'OneCard'Images'' | Set-Imagesize -Destination ''Aroostook'CAMSEnterprise'StuPics'Test -WidthPx 351 -HeightPx 400 -overwrite -FixedSize
} CATCH {
send-mailmessage -from DoNotReply@Husson.edu -to "email","email" -subject "Warning! -- One Card" -smtpserver securemail.husson.edu -body "Their has been an error processing the one card pictures please investigate!"
}
enter code here