Récupérer chemin dans fichier texte et utiliser le dernier nom de dossier

Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

Je suis en train de développer un petit programme pour sauvegarder des données sur un NAS, j'ai donc un programme qui me permet d'inscrire les chemins à sauvegarder dans un fichier texte.
L'étape suivante consiste à utiliser une commande (ROBOCOPY) et à la répéter avec tout les chemin qu'il y a dans le fichier.

EXEMPLE :
Je veux sauvegarder "D:\Data", je veux que ROBOCOPY me copie les fichier du dossier "D:\Data" en me créant un dossier nommé "Data" sur le NAS.

J'ai donc un code batch qui lit toutes les lignes :
for /f "tokens=*" %%a in (path.csv) do (
echo line=%%a
)


Et un code qui me permet de récupérer le dernier contenu d'un chemin :
set CHEMIN=C:\Users\XXXXX\Desktop
for /f "delims=\ tokens=*" %%i in ('echo %CHEMIN%') do echo %%~ni
pause


J'essaie de cumuler les 2 afin d'indiquer à ROBOCOPY quel est le chemin à copier et stocker les fichier dans un dossier de même nom que le dernier dossier du chemin.

Merci pour toute aide :)

Configuration: Windows / Firefox 72.0

7 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Voilà ce que ça donnerait à peu près :

    @echo off
    Setlocal EnableExtensions DisableDelayedExpansion
    chcp 65001 >nul

    for /f "delims=" %%a in (path.csv) do (

    for /f "delims=" %%i in ("%%~a") do (

    robocopy "%%~a" "\\adressedunas\partage\%%~ni"

    )
    )

    pause


    Il manque la création du dossier, pour cela il faudrait savoir sur quelle lettre tu as monté ton lecteur réseau.

    1
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    Quand je lis ton projet 2 détails me chiffonnent :

    - quel est le système d'exploitation du NAS ?
    - ton script est lancé depuis quelle machine ?

    0
  3. Utilisateur anonyme
     
    Bonjour,

    J'ai un NAS Synology, donc il s'agit d'un diskstation.
    Tandis qu'au script, il s'agit d'un script qui va être exécuté avec les tâches planifiées de Windows, le logiciel me permet juste de définir quels dossier sauvegarder, c'est pour ceci que je m’intéresse maintenant au script.
    0
  4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Je ne pense pas que Diskstation soit capable de comprendre des commandes MS-DOS.

    En plus le script va être exécuté depuis une machine distante, ce qui n'est pas possible sauf utilisation d'un outil tiers tel que PsExec (de la suite PsTools).

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Le script serais exécuter sur un ordinateur Windows, j'ai déjà le script qui copie à l'identique un dossier spécifique sur le NAS, ça fonctionne très bien.
    Le problème ici c'est que je souhaiterais faire exactement la même chose mais avec des chemins de dossier qui sont inscrit dans un fichier texte, donc il s'agit seulement de code batch pour Windows
    0
  7. Utilisateur anonyme
     
    Merci beaucoup, ça fonctionne niquel.
    Juste petite question, comment faire pour que le script copie aussi les dossiers commençant par un "." ? J'ai essayer de copier un dossier caché (par exemple .nomdossier) trouvable dans mon dossier utilisateur.

    Je met le code si ça peut en aider plus d'un :

    @echo off

    Setlocal EnableExtensions DisableDelayedExpansion
    chcp 65001 >nul

    ::Variables
    for /f "tokens=1-3 delims=:" %%a in ("%time%") do set jour_backup=%%ah%%b
    set backup_path=\\adressedunas\Backups
    set cmd_backup=robocopy /Z /MIR /UNILOG+:"%backup_path%\LOGS_Robocopy\LOGS_%DATE:/=-%_%jour_backup%.txt" /NP /TEE

    ::Copie
    for /f "delims=" %%a in (path.csv) do (
    for /f "delims=" %%i in ("%%~a") do (
    ::Chemins à copier Source -> Dossier de destination
    %cmd_backup% "%%~a" "%backup_path%\%%~ni"
    )
    )
    ::Jouer un son
    powershell -c (New-Object Media.SoundPlayer "C:\Windows\Media\tada.wav").PlaySync();
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Voilà :

      @echo off
      Setlocal EnableExtensions DisableDelayedExpansion
      chcp 65001 >nul

      for /f "delims=" %%a in (path.csv) do (

      for /f "delims=" %%i in ("%%~a") do (

      robocopy "%%~a" "\\adressedunas\partage\%%~nxi"

      )
      )

      pause
      0
  8. Utilisateur anonyme
     
    Excellent merci beaucoup :D
    0