[Batch] nombre maximum de parametres

nombre maximum de parametres [Batch] - Shell/Batch - Programmation

Marsh Posté le 30-05-2006 à 20:11:57    

J ai creer un batch dont le but est de lancer un programme sur tout les fichiers que l'on lui passe en paremetre. Celui-ci marche sans probleme pour un nombre de fichiers limités, mais plante lorsqu'on lui passe plus de 80 fichiers. Hors j'ai besoin de travailler sur un grand nombre de fichiers (environ 8000).  
 
L'erreur qui apparait lorsque je passe plus de 80 fichiers est :  
 

Citation :

Windows ne parvient pas à accéder qu périphérique, au chemin d'accès ou au fichier spécifié. Vous ne disposez peut-être pas des autorisations appropriées pour avoir accès à l'élément.


 
D'aprés mes recherches je pense que cette erreur est du à une limitation windows. Toutefois je n'ai pas trouvé de solution pour contourner le problème. Je suis ouvert à toutes suggestions.
 
Ci-dessous mon code au cas où le problème serait lié à une erreur de ma part :
 

Citation :

 
@echo off
 
SET mypath=C:\progIP
 
:start
if %1x == x goto end
 
SET STRING=%1
 
SET STR=%STRING:~-10%
 
SET ST=%STR:~0,6%
 
%mypath%\demo.exe "%STRING%" %mypath%\convert.txt %mypath%\_copy.txt %mypath%\graph\graph%ST%.txt
 
shift
 
goto start
 
:end
echo End

Reply

Marsh Posté le 30-05-2006 à 20:11:57   

Reply

Marsh Posté le 30-05-2006 à 20:32:52    

Déjà tu peux très bien faire :
set VAR=%VAR:~x,y%
donc inutile de définir trois variables différentes pour STRING.
 
D'ailleurs entre les définitions de STR et ST, n'y a-t-il pas une rédondance ?
 
Pour répondre à ton  problème, tu comptes taper les 8000 params à la main ou par copier/coller ?
 
Ce serait plus simple d'employer une boucle for :
 

Code :
  1. for %%s in (
  2.   STR1
  3.   STR2
  4.   ...
  5.   STR8000
  6. ) do (
  7.   ...blabla avec %%s...
  8. )


 
for /?
pour plus d'infos.
 
Note : STR1... STR8000 peuvent très bien être stockés dans un fichier séparé.

Reply

Marsh Posté le 30-05-2006 à 20:43:37    

merci pour ton aide
 
Mais pour les fichiers je compte plutot les glisser dans le .bat, ce sont des images tirées de plusieurs vidéo et donc je voudrais choisir sur lesquelles travailler simplement en les glissant dans le .bat.
 
S'il n'y a pas de moyen, je pourrais utiliser le fichier temporaire mais le programme n'étant pas pour moi, il serait plus simple de simplement mettre les fichiers dans le .bat pour qu'ils soient traités !

Reply

Marsh Posté le 30-05-2006 à 20:57:29    

Je ne comprends pas trop ce que tu voulais dire par "mettre les fichiers dans le .bat pour qu'ils soient traités" :(

Reply

Marsh Posté le 30-05-2006 à 21:22:48    

en fait je veux le faire par une interface Windows et donc faire un clic gauche sur les images pour les glisser jusqu'au .bat et donc les donner en argument du .bat.
 
J'espere avoir ete clair cette fois :s

Reply

Marsh Posté le 30-05-2006 à 22:22:43    

Oki, tu veux fournir les params par glisser/déposer.
 
Je ne pense pas que ça soit une soluce "universelle", dans le sens que cette manip forme une ligne de commande shell :
<chemin_complet_du_batch> <liste_des_params>
 
Or, sous Windows, la longueur de cette ligne est limitée à x caractères, dont x je ne me souviens plus ;) mais ce n'est pas infini, d'où ton problème de traitement d'au-delà de 80 fichiers abordé initialement.

Reply

Marsh Posté le 31-05-2006 à 12:45:21    

ok merci,
 
Au final je vais donc utiliser la méthode que tu m'as donné plus haut !

Reply

Marsh Posté le 31-05-2006 à 16:13:16    

hum...
 
j'essaye donc d'utiliser une boucle for mais

Citation :

@echo off
 
FOR /F %%a IN (tmp.txt) DO (  
 echo %%a:~-4%
)


ne tronque pas la valeur comme je le souhaiterais, et m'affiche : monfichier.ext:~-4 !
tmp.txt contenant 1 nom de fichier à traiter par ligne
 
est-ce donc possible de tronquer %%a ???

Reply

Marsh Posté le 01-06-2006 à 08:13:37    

Industrie a écrit :

est-ce donc possible de tronquer %%a ???


Code :
  1. FOR /F %%a IN (tmp.txt) DO (
  2.   call :process %%a
  3. )
  4. goto end
  5. :process
  6. set VAR=%~1
  7. echo %VAR:~x,y%
  8. goto :eof
  9. :end

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed