Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: vikyBatch en 15 Julio 2015, 00:38 am



Título: almacenar el nombre de un directorio en una variable
Publicado por: vikyBatch en 15 Julio 2015, 00:38 am
buenas a todos

necesito hacer un fragmento de código en batch que busque los nombres de las carpetas ( las subcarpetas que contengan *_C_*) y que almacene el nombre en una variable para poder trabajar con ella, necesito  almacenar el nombre  para  poder modificarlo en caso de que  tenga caracteres especiales  y  anadir ese nombre a cada fichero de la subcarpeta.

después de pasarme un buen rato intentando hacerlo sin éxito al final me he quedado sin ideas, lo estoy intentando con un for, pero  ni modo, ¿a alguien se le ocurre algo?

mi código:

Código
  1. MKDIR "D:\Documents\testbatch\temp"  
  2. SET TEMPDossier="D:\Documents\testbatch\temp"  
  3. :Check  
  4. CD /D D:\Documents\testbatch  
  5. FOR /D %%x in (*_C_* ) do (  
  6. CALL :fct_log_Texte INFO  " dossier disponible %%x"  
  7. setlocal enabledelayedexpansion  
  8. SET VarDossier= %%x  
  9. ECHO !VarDossier!  
  10. SET rename=!VarDossier!  
  11. echo %rename%  
  12. :: Quote the variable and remove the !  
  13. Set rename="%rename:!=%"
  14. Setlocal EnableDelayedExpansion
  15. For %%J In (^| ^& ^< ^> ^^ + ^( ^) \ / . @ # $ { } [ ] ' ; : , ? ` ^%% ^") Do (Set rename=!rename:%%J=!)
  16. FOR /F %%i in ('dir /b " D:\Documents\testbatch\%VarDossier%\*"') do (
  17. MOVE /Y " D:\Documents\testbatch\%VarDossier%\%%i" "%TEMPDossier%\%rename%_%%i"
  18. dir /b /a " D:\Documents\testbatch\%VarDossier%\*" | >nul findstr "^" && (call :DirectoryEmpty) || (call :Check)


Título: Re: almacenar el nombre de un directorio en una variable
Publicado por: Eleкtro en 15 Julio 2015, 01:20 am
1. Usa las etiquetas para insertar código, lee mi firma.

2. ¿Qué problema tienes exactamente con el código que has mostrado?, intenta ser específico.

3. ¿Qué hay de los métodos fct_log_Texte y DirectoryEmpty?, no aparecen en el código.

4. Por defecto Windows no permite utilizar ciertos caracteres especiales al nombrar directorios/archivos, puedes descartar muchos caracteres innecesarios del For para aumentar el rendimiento.

5. El último For del código que has mostrado, tiene la agrupación abierta, por lo que dará error de sintaxis.

Prueba de la siguiente manera:
Código:
@Echo OFF & Setlocal EnableDelayedExpansion

Set "sourceDirPath=C:\Users\"
Set "dirNamePattern=_C_"
(MKDir "%srcDir%")2>Nul


For /D /R "C:\users" %%# In ("*%dirNamePattern%*") Do (

(Echo "%%~nx#" | findstr "[\+\(\)\@\#\$\{\}\[\]\'\;\,\`\&\%%\^\.]")1>Nul 2>&1 && (
Call :DirtyWork "%%~nx#" "%%~f#"
)

)

Pause&Exit /B 0


:DirtyWork :: %1=Directory Name, %2=Directory Path

Set "renamedName=%~1"

For %%# In ("+","(",")","@","#","$","{","}","[","]","'",";",",","`","&","%%","^") Do (
Set "renamedName=!renamedName:%%~n#=!"
) & Set "renamedName=!renamedName:.=!"

Echo: Dir Name: "%~1"
Echo: Rename  : "!renamedName!"
Goto :EOF

Saludos!


Título: Re: almacenar el nombre de un directorio en una variable
Publicado por: vikyBatch en 15 Julio 2015, 08:02 am
muchas gracias   por respoder , en realidad  no está todo  el código.
Aclaraciones:
 fct_log_Texte y DirectoryEmpty son 2 funciones, el primero  nos permite crear  un log  y  el segundo cunao hacer alggo específico cuando la carpeta está vacia.
zipper&tom, es  otra funcion que  hace  otra cosa.

mi intención es, desde un carpeta concreta buscar  todas lass subcarpetas que contenga  una *_C_*  , vérificar que no tengan caracteres speciales como nombre de subcarpeta, en el caso de contener algún caracter  extraño , suprimirlo los  caracteres especiales del nombre de supcartepa,  luego  utlizar ese nombre (modificado o no ) y añadir el  nombre a todos  sus ficheros.
cuando las  variables están en  duro  funciona, pero  cuando  quiero almacenar el valor  en una variable desde  un for, no puedo, mis  variables   "set VarDossier=%%x" y " SET rename=%VarDossier%" están vacias




Título: Re: almacenar el nombre de un directorio en una variable
Publicado por: Eleкtro en 17 Julio 2015, 21:52 pm
cuando  quiero almacenar el valor  en una variable desde  un for, no puedo, mis  variables   "set VarDossier=%%x" y " SET rename=%VarDossier%" están vacias

Dentro del bloque de un For, debes hacer uso de la expansiónd e variables:
Código:
Set "rename=!VarDossier!"

O en su defecto, con el comando Call:
Código:
Call Set "rename=%%VarDossier%%"

Slaudos


Título: Re: almacenar el nombre de un directorio en una variable
Publicado por: vikyBatch en 21 Julio 2015, 00:56 am
Muchas gracias  por los consejos  voy a probar.