2011-06-11 14 views
8

El siguiente script obtiene todos los archivos con extensión .new_tmp y los copia en un archivo con el mismo nombre pero sin la extensión .new_tmp. Además, se coloca un comentario en la parte superior del archivo y se elimina el archivo .new_tmp.una flecha → carácter que se adjunta a los archivos en un script .bat

echo ^<?php /* > start.tmp 
echo */ ?^> > end.tmp 
for /R "./mydir" %%I in (*.new_tmp) do (
    copy start.tmp+license.txt+end.tmp+%%I worker.tmp 
    move worker.tmp %%~pI%%~nI 
    del %%I 
) 

El problema es que un derecho frente flecha → se añadirá al final de todos los archivos

¿Por qué es este personaje conseguir añade al final de todos los archivos?

ACTUALIZACIÓN He intentado esto con un ejemplo mucho más simple y obtuvo los mismos resultados

copy NUL worker.tmp 
copy worker.tmp + license.txt + license.txt + license.txt 

mismo problema, una flecha en el extremo ...

Estoy funcionando bajo Windows 7

+0

Qué flecha carácter, ► o → o alguna otra cosa? –

+0

La segunda flecha → – jax

+0

Probablemente sea su edición mostrando un marcador EOF. ¿lo ves si acabas de hacer 'más nombre de archivo' en la línea de comandos? –

Respuesta

19

La flecha es un carácter ascii CTRL-Z que se agrega con el comando COPY cuando se utiliza para concatenar archivos con la opción +.

Para evitar que COPY anexe el carácter CTRL-Z, utilice COPY /B para una copia binaria.

Por lo tanto, el comando sería

COPY /B start.tmp+license.txt+end.tmp+%%I worker.tmp 
+0

¡gracias! buscando por todas partes por qué en mi paquete SSIS, había ese extraño carácter de flecha (EOF). Encontré que era debido a la copia FileA + FileB FileA (para concatenar). Una nota importante: tuve el argumento copy/b [en minúsculas] y no funcionará. Tiene que ponerlo MAYÚSCULA (copiar/B) – Simon

+0

Curiosamente, aún queda en el carácter ASCII 1AH en el medio, contrariamente a eso, agregar el '/ B' al final de la declaración funciona – Arthur

1

Cuando/B sigue Destinos, copia no añade un carácter de fin de archivo.

Esto es cómo iba a resolver el problema:

COPY start.tmp+license.txt+end.tmp+%%I worker.tmp /B 
+0

Funcionó como se anuncia. ¡Gracias! – Arthur

Cuestiones relacionadas