Ruta de archivo seleccionado en menú contextual

Iniciado por ptv11jao, 29 Diciembre 2020, 16:30 PM

0 Miembros y 1 Visitante están viendo este tema.

ptv11jao

Que tal buen día a todos

Les comento mi duda, tengo un bat para renombrar archivos pdf con el nombre de la carpeta que lo contiene, me funciona cuando existe solo un pdf en la carpeta, el problema es cuando existen 2 o mas en la misma, solo un archivo especifico es el que debe tener ese nombre, si utilizo ese bat me agarra el primer archivo que encuentra por lo que no me funciona, el bat lo tengo anclado al menú contextual por lo que me serviría saber que código puedo utilizar para copiar la ruta del archivo que tengo seleccionado y poder correr el bat a partir de ese archivo.

Esto es lo que utilizo por el momento, ya tengo varios bats que me ayudan en ciertas actividades, espero poder juntar todo algún día y automatizar todo el proceso que manejo, pero paso a paso


Código (dos) [Seleccionar]
@echo off
for %%* in (*.pdf) do set CurrDirName=%%~nx*
xcopy "%CurrDirName%" "copia.pdf"
for %%* in (.) do set CurrDirName=%%~nx*
echo %CurrDirName%
REN "copia.pdf" "%CurrDirName%.pdf"
exit


Mudereded401

Cita de: ptv11jao en 29 Diciembre 2020, 16:30 PM
Que tal buen día a todos

Les comento mi duda, tengo un bat para renombrar archivos pdf con el nombre de la carpeta que lo contiene, me funciona cuando existe solo un pdf en la carpeta, el problema es cuando existen 2 o mas en la misma, solo un archivo especifico es el que debe tener ese nombre, si utilizo ese bat me agarra el primer archivo que encuentra por lo que no me funciona, el bat lo tengo anclado al menú contextual por lo que me serviría saber que código puedo utilizar para copiar la ruta del archivo que tengo seleccionado y poder correr el bat a partir de ese archivo.

Esto es lo que utilizo por el momento, ya tengo varios bats que me ayudan en ciertas actividades, espero poder juntar todo algún día y automatizar todo el proceso que manejo, pero paso a paso


Código (dos) [Seleccionar]
@echo off
for %%* in (*.pdf) do set CurrDirName=%%~nx*
xcopy "%CurrDirName%" "copia.pdf"
for %%* in (.) do set CurrDirName=%%~nx*
echo %CurrDirName%
REN "copia.pdf" "%CurrDirName%.pdf"
exit



  De hecho, desde toda la vida se sabe que no se pueden tener 2 archivos con el mismo nombre en la misma carpeta ._.

  La única opción que veo que podrías hacer es enumerar los archivos desde X hasta el infinito, Así podrías tener por ejemplo, archivos llamados así:

     NOMBREDECARPETA-[1].pdf
     NOMBREDECARPETA-[2].pdf
     etc......

Saludos  ;)
Pero aunque los que sepan me digan que no, yo sé muy bien que existe el lado oscuro del sol. – El lado soleado de la calle

ptv11jao

Hola, gracias por el comentario, creo que no explique bien, el bat debe copiar y renombrar solo el archivo que se selecciona, los demás no me interesan, solo están en la carpeta como mero respaldo; el problema es que el bat que tengo se aplica al primer pdf que encuentra y no al que necesito específicamente, solo que no se cual es le código para sacar la ruta del archivo que seleccioné para incorporarlo a mi bat

Mudereded401

#3
 La verdad no estoy del todo seguro de haberlo entendido jaja, Pero no importa. Eso se puede arreglar simplemente colocando un SET/P.

 Yo la verdad no sabía que puedes hacer esto (Hasta hace poco lo supe lol): Arrastras el archivo que quieres copiar & renombrar hasta la cmd en la que se está ejecutando el SET/P y saldrá automaticamente el archivo con su ruta completa. Aqui te dejo una prueba pero no sé si habrá una manera más simple de hacerlo, pero de ésta manera es que yo se hacerlo.


@echo off
set/p ruta=Arraste el archivo hasta aqui :
:cuenta
set revizar=%ruta:~-1%
if %revizar%==\ (goto end) else (
set archivo=%ruta:~-1%%archivo%
set ruta=%ruta:~-999,-1%
goto cuenta)
:end
echo %ruta% - %archivo%
pause>Nul



PD: Si a tu ruta le salen comillas al arrastrar el archivo a la CMD (ej: "C:\users\user\desktop\archivo"), Tendrás que incluir comandos para revizar si las tiene, y de ser así, quitarselas usando el mismo método que yo, Quedando:

"C:\users\user\desktop\archivo.txt"  >>>  C:\users\user\desktop\archivo.txt       (Sin comillas)


edit: A mi simplemente no me salen esas comillas y nunca las he tenido que corregir, ya que la ruta hacia la carpeta donde hago todos mis "experimentos" con archivos .bat, no contiene ningún espacio. Si tu ruta es algo como ("C:\users\alberto\desktop\Mi archivo.bat") Tendrá comillas pues tiene almenos 1 solo espacio en la ruta. Por el contrario si no tiene ningún espacio la ruta, Será sin comillas tal como la mia: (C:\users\m401\desktop\script.bat)
Pero aunque los que sepan me digan que no, yo sé muy bien que existe el lado oscuro del sol. – El lado soleado de la calle

EdePC

Haber si lo entiendo bien, quieres dar un click derecho en un archivo PDF y que te aparezca una opción para que dicho PDF tenga por nombre el nombre de la carpeta que lo contiene?

Puedes agregar el Menú contextual como ya lo vienes haciendo o utilizar un práctico utilitario, en mi caso usare FileTypesMan de Nirsoft: https://www.nirsoft.net/utils/filetypesman.zip



Código (dos) [Seleccionar]
cmd /C For %%a In (.) Do Ren "%1" "%~na.pdf"

Como el "Batch" es tan corto opté por agregarlo directamente ahí y no utilizar un Batch externo

Lo que hace es muy sencilla, vas al archivo PDF le das click derecho > Renombrar PDF y mágicamente se le cambia el nombre igual al nombre de la carpeta que lo contiene

ptv11jao

Ya quedó, perdón por no contestar pronto pero hasta ahora pude tener mi eureka

Muchas gracias Mudereded401 y EdePC por el apoyo que aunque no aplique las soluciones que me mencionaron, fue el analizar sus respuestas lo que me llevo a lo que buscaba.

Les comento efectivamente quería hacer click derecho en el PDF y que me apareciera la opción de renombrar o generar una copia de ese archivo renombrado como el nombre de la carpeta.

Ejecute el bat de Mudereded401 pero el proceso es en una parte manual y mi intención es automatizar el proceso

Luego trate de aplicar la solución de EdePC pero dentro de todo el proceso ya tengo varios programas con macros que se ejecutan para terminar lo que finalmente le hago al archivo, por lo que no lo quería hacer mucho mas pesado (Al final mi intención es reducirlo todo a un bat para que sea ligero y rapido)

Pero me puse a checar el porque al arrastrar el archivo a CMD nos daba la ruta y que significaba cada letra de el código que nos paso EdePC y de hay salio todo

La solución fue poner el siguiente código directamente en el editor de registro:

Código (dos) [Seleccionar]
cmd /c echo F | xcopy "%0" "copia.pdf"

Luego ejecuto un bat que renombra el archivo "copia.pdf" y llama a las demás acciones que necesito, casi funciona de lujo

Un saludo y nuevamente gracias

EdePC

mmm... no sé, me parece que es más fácil dar Ctrl + C y Ctrl + V para obtener un "archivo - copia.pdf", o mejor aún arrastrar el archivo PDF a un costado manteniendo presionado Ctrl (esto sirve para sacar un copia rápida del archivo arrastrado)

Dar click derecho y seleccionar un item del menú a mano es tardado a no ser que al menos agregues un atajo de teclado anteponiendo un & a la letra que actuará de atajo de teclado, en mi ejemplo le pondré la e porque veo que no está ocupada por otra opción del menú actual:



De tal manera de que si das un click derecho sobre el PDF y se muestra el menú contextual, simplemente presionas la tecla e para inmediatamente ejecutar esa opción en lugar de tener que ubicarlo y darle click con el mouse.

También veo que estás usando XCopy, normalmente se usa para copiar carpetas con contenido de más carpetas, si es algo tan sencillo como el copiar un solo archivo, yo preferiría usar el Copy que ya es nativo (comando interno) tal cual he puesto en la captura de pantalla anterior. También me ahorro las comillas si estoy seguro que el nombre de archivo no contiene espacios.

- Ya solo te quedaría controlar si existe un archivo que ya tiene de nombre "copia.pdf", así como está no sobre-escribe nada pero al no especificar nada hay un retardo completamente insignificante, pero lo hay.

- Para sobre-escribir tanto en Copy como en XCopy:

Código (dos) [Seleccionar]
Echo F | XCopy /Y "%0" copia.pdf
Copy /Y "%0" copia.pdf


- Para no sobre-escribir:

Código (dos) [Seleccionar]
Echo F | XCopy /-Y "%0" copia.pdf
Copy /-Y "%0" copia.pdf

ptv11jao

Que tal EdePC, el Ctrl + C y Ctrl + V lo descarte porque seria manual la cosa y el objetivo es automatizarlo completamente, lo de arrastrar el archivo no lo sabia y esta muy bueno ese truco, el atajo de teclado si servirá y seguro que se lo pongo.

Lo de xcopy lo deje porque fue el primero que me funcionó al hacer pruebas y ya estaba cansado de estar intentando todo el día, se lo voy a cambiar por copy como me dices con el parámetro.

El archivo es para unas chavas que hacen practicas en donde trabajo, tiene que hacer la copia del archivo original y etiquetarlo con el nombre de la carpeta, la fecha en la que llegó el archivo, y unos datos que están guardados en el sistema administrativo que es lento como no tienes idea; al inicio todo se hacia a mano y se etiquetaban con cuadros de texto en acrobat, se llegaban a tardar hasta 5 minutos en cada archivo, aparte de al ser practicantes y estar todo el día en ello se cansaban y al final ya no los hacían bien y se llegaron a presentar problemas por eso.

Hice estos bats, vincule las tablas de foxpro, el etiquetado automático, saque que cada archivo sale en 6 segundos exactamente como los necesitamos, se que se puede optimizar mas pero vamos para allá.

Muchas gracias por el apoyo y supongo que los seguiré molestando mas adelante porque aunque no estudie sistemas o algo relacionado, me gusta que me duela la cabeza un rato y mas que de algunas cosas no tengo ni idea que existen