重命名文件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)" 
}

重命名文件Powershell看不到

这样的东西适合你的需求吗?

$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