2017-09-18 2 views
0

J'ai une structure de dossiers, où chaque dossier a un fichier Excel que je veux copier vers une nouvelle destination.Batch: copie de la source du formulaire de fichier vers la destination - Impossible de trouver l'erreur spécifiée par le fichier

Exemple:

Chemin source: C: \ Data \ 0. MyFolder \ 1. Modèles \ 00. Dossier 0 \ File.xlsb

Chemin de destination: C: \ Data \ 0. MyFolder \ NewFolder \ 00. Dossier 0 \ Fichier.xlsb

Le "00. Dossier 0" est un nom stocké dans un tableau. J'utilise donc une boucle for pour créer un nouveau répertoire basé sur les noms du tableau et je crée la nouvelle structure similaire.

Je reçois le message "Le système ne trouve pas le fichier spécifié." lorsque vous essayez de copier un fichier d'un dossier vers un autre dossier.

Lorsque j'imprime le chemin du fichier, il semble correct. Qu'est-ce que je fais mal?

Voici le code:

@echo off 
@break off 
@title Generate Subfolders 
@color 0a 
@cls 

setlocal EnableDelayedExpansion 

SET "batch_path=%~dp0" 
SET "first_folder=01. Folder1" 
SET "second_folder=02. Folder2" 
SET "third_folder=03. Folder3" 

:: Create the new Working Data folder 
SET /p new_folder_name= Enter Directory Name: 
SET "full_path=%batch_path%%new_folder_name%" 

ECHO Working... 

IF NOT EXIST ("%full_path%") (
    MKDIR %new_folder_name% 
    IF "!errorlevel!" EQU "0" (
    ECHO Folder created successfully. 
) ELSE (
    ECHO Error while creating folder. 
) 
) ELSE (
    ECHO Folder already exists. 
) 

SET "folders_list="%first_folder%" "%second_folder%" "%third_folder%"" 
SET "templates_folder=C:\Data\0. MyFolder\1. Templates" 

FOR %%f in (%folders_list%) DO (
    SET "updated_full_path=%full_path%\%%f" 
    SET "template_full_path_file=!templates_folder!\%%~f\file.xlsb" 
    :: Displays the path file correctly 
    ECHO !template_full_path_file! 
    MKDIR "!updated_full_path!" 
    :: However I cannot copy the file to new destination 
    COPY template_full_path_file updated_full_path 
    PAUSE 
) 
PAUSE 
EXIT 
+2

Traitement inconséquent des guillemets. '%% f' contient des chaînes quoted alreday et il devrait être' SET 'updated_full_path =% full_path% \ %% ~ f "' et comme @SAhmad a déjà souligné que '!' est manquant mais comme les chemins contiennent des espaces, ils doivent être cité aussi: "COPY"! template_full_path_file! " "! updated_full_path!" ' – LotPings

+0

@LotPings Merci beaucoup! :) –

Répondre

1

Vous n'êtes pas en train de résoudre les chemins de commande copy.

COPY "!template_full_path_file!" "!updated_full_path!"

+0

Merci beaucoup! J'ajoute également des guillemets doubles comme @LotPings suggéré. –

+0

Belle prise! Mise à jour de la réponse – sohaib