1 votes

Renommer les fichiers de la même façon, encore et encore

J'ai fait travailler un programme sur certaines de mes images et il les a renvoyées dans mon répertoire. Ce qui est drôle, c'est qu'elles sont maintenant toutes en png au lieu de gif.

Au début, j'ai pensé qu'il s'agissait d'un simple renommage, mais j'ai testé avec php en utilisant createimagefrompng(), qui lancera une erreur si l'image n'est pas un fichier png valide. Aucune erreur n'a été renvoyée.

Que cela me donne ou non un résultat précis à 100 % n'est pas le problème ici, le problème est que je veux renommer tous ces fichiers de la même manière.

Alors que je pourrais écrire un fichier php pour faire cela pour moi, je me demande comment je pourrais faire ce qui suit en batch ou c# ou java.

Tous ces fichiers contiennent encore la chaîne ".gif", et je veux la supprimer. En php, ce serait aussi simple que d'utiliser une boucle foreach, de lire le fichier, d'utiliser str_replace, puis de détruire l'ancien fichier et d'écrire le nouveau.

Je suis un peu coincé quant à la façon de faire cela en batch, c# ou java, quelqu'un peut-il m'aider ?

De plus, j'utilise Windows Vista et j'ai installé Powershell 1.0.

Solution 1 - C# :

var files = Directory.GetFiles(@"C:\Downloads\Temp\test\");
foreach (var file in files)
{
  if(file.Contains(".gif"))
  {
    string testing = string.Format("{0}.png", Path.GetFileNameWithoutExtension(file.Replace(".gif", "")));
    File.Move(file, @"C:\Downloads\Temp\test\"+testing);
  }
}

4voto

TofuBeer Points 32441

Sur la ligne de commande :

(ceci suppose qu'il n'y a pas de fichiers .gif)

REM first rename all .gif.png to .gif
for %i in (*.gif.png) do ren %i %~ni

REN then rename all .gif to .png
for %i in (*.gif) do ren %~ni.gif %~ni.png

Utilisez for /help pour connaître les % d'options prises en charge par votre version de Windows.

Ce qui suit ne fonctionne pas avec .gif.png, désolé, j'ai mal lu cette partie.

en ligne de commande (encore plus facile !) :

ren *.gif *.png

une version Java (corrigée pour le .gif.png) :

import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{
    public static void main(final String[] argv)
    {
        final File   dir;
        final File[] entries;

        dir     = new File(argv[0]);
        entries = dir.listFiles(new FilePatternFilter(".*\\.gif\\.png"));

        for(final File entry : entries)
        {
            if(entry.isFile())
            {
                final String path;
                final String newPath;
                final File   newEntry;

                path     = entry.getPath();
                newPath  = path.substring(0, path.length() - "gif.png".length()) + "png";
                newEntry = new File(newPath);

                if(!(entry.renameTo(newEntry)))
                {
                    System.err.println("could not rename " + entry.getPath() + 
                                       " to " + newEntry.getPath());
                }
            }
        }
    }
}

3voto

Joey Points 148544

Dans Batch, vous pouvez effectuer les opérations suivantes :

@echo off
setlocal enabledelayedexpansion enableextensions
for %%f in (*.gif.png) do (
    set fn=%%f
    set fn=!fn:.gif=!
    ren "%%f" "!fn!"
)
endlocal

Cela devrait fonctionner, du moins si les fichiers sont nommés .gif.png ... si ce n'est pas le cas, changez le filtre dans le fichier for déclaration. Plus d'aide sur ce que vous pouvez faire avec les remplacements dans une set se trouvent avec help set .

1voto

Nils Wloka Points 1166

Si vous voulez renommer tous les fichiers .png d'un dossier en .gif avec Java, je vous suggère de jeter un coup d'œil sur le site suivant Apache Commons IO . Le site FileUtils fournit une méthode permettant d'itérer sur tous les fichiers ayant une extension donnée ([iterateFiles][3]), tandis que File lui-même fournit une méthode de type renommer à méthode.

EDIT : Pour une raison quelconque, stackoverflow n'aime pas l'utilisation des paranthèses dans le lien 3, vous devrez donc le copier et le coller manuellement. Je choisirais probablement l'approche par lot, car Java n'est pas exactement votre premier choix pour les tâches administratives :)

[3] : http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html#iterateFiles (java.io.File, java.lang.String[], boolean)

1voto

Quintin Robinson Points 41988

Vous pourriez probablement faire quelque chose du genre de ce qui suit en c#

var files = new DirectoryInfo(@"c:\files").GetFiles(@"*.gif");
foreach (var file in files)
    File.Move(file.FullName, string.Format("{0}.gif", Path.GetFileNameWithoutExtension(file.FullName)));

ou plus simplement

var files = Directory.GetFiles(@"c:\files", @"*.gif");
foreach (var file in files)
    File.Move(file, string.Format("{0}.gif", Path.GetFileNameWithoutExtension(file)));

0voto

Billy ONeal Points 50631

Si vous pouvez utiliser le C, vous pouvez utiliser la bibliothèque boost::algorithim stringalgo et/ou boost::regex si vous voulez vraiment un moyen puissant de le faire. Notez que l'utilisation des API Windows EDIT (ou des équivalents Linux) pour déplacer un fichier, etc., sera beaucoup plus rapide, car elles créeront simplement de nouveaux liens durs sur le disque, plutôt que de copier les données, si cela est possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X