Tengo un árbol de carpetas, como este (es solo un ejemplo, será más profundo en mi caso real):
C:\test
|
+---folder1
| foo bar.txt
| foobar.txt
|
+---folder2
| foo bar.txt
| foobar.txt
|
\---folder3
foo bar.txt
foobar.txt
Mis archivos tienen uno o más espacios en el nombre y necesito ejecutar un comando sobre ellos, así que estoy interesado en foo bar.txt pero no en foobar.txt.
Intenté (dentro de un archivo por lotes):
for /r test %%f in (foo bar.txt) do if exist %%f echo %%f
donde el comando es el simple echo
.
No funciona porque se omite el espacio y no obtengo salida.
Esto funciona pero no es lo que necesito:
for /r test %%f in (foobar.txt) do if exist %%f echo %%f
Imprime:
C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt
Intenté usar las comillas (") pero no funciona:
for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f
No funciona porque las comillas todavía se incluyen en la salida:
C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"
Sin el interruptor recursivo, puede indicar que
FOR
no imprima las comillas:Es posible que pueda hacer
FOR
declaraciones anidadas . Lo externo caminaría por el árbol del directorio y lo interno sería el de arriba.fuente
FOR /R %%d in (.) DO for %%f ...
es recursivo, pero habría algunas cosas que resolver para que funcione. Puede que tenga que usar la expansión retrasada, por ejemplo.SETLOCAL ENABLEDELAYEDEXPANSION
y!varname!
, etc.Es posible que desee ver el comando forfiles.
'/ S' - Recursión. Buscar en todos los subdirectorios
'/ M "* *"' - Máscara de archivo. Solo busque archivos con un espacio en su nombre.
'/ C "cmd / C echo @PATH"' - Comando. Emita este comando en todos los archivos encontrados.
Salida de ejemplo:
fuente
La bandera
f
es la que necesita para obtener un nombre de archivo absoluto sin comillas (para que pueda poner comillas si es necesario). Pero como entra en conflicto con el nombre de la variable que elige, debe usar otro:fuente
Gracias Dennis! Yo también estaba trabajando en un problema casi idéntico. Quería un archivo bat que pudiera pasar en un parm de entrada como una cadena de búsqueda de nombres de archivos, recursivamente a través de directorios. En caso de que esto sea útil para alguien más, aquí está.
fuente