Como faço para escrever um script em lotes do Windows para copiar o novo arquivo de um diretório?

StackOverflow https://stackoverflow.com/questions/97371

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu preciso copiar o arquivo mais recente em um diretório para um novo local. recursos até agora que eu encontrei na forfiles comando, a data relacionada com a questão aqui, e outra pergunta relacionada . Eu só estou tendo um pouco de dificuldade para colocar os pedaços juntos! Como faço para copiar o arquivo mais recente nesse diretório para um novo local?

Foi útil?

Solução

Windows shell, um forro:

FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT

Outras dicas

A resposta aceita dá um exemplo de usar o arquivo mais recente em um comando e, em seguida, sair. Se você precisar fazer isso em um arquivo de morcego com outras operações complexas que você pode usar o seguinte para armazenar o nome do arquivo mais recente em uma variável:

FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I

Agora você pode referenciar% NewestFile% em todo o resto do seu arquivo de morcego.

Por exemplo, aqui é o que usamos para obter a versão mais recente de um arquivo bak banco de dados a partir de um diretório, copie-o para um servidor, e em seguida, restaurar a db:

:Variables
SET DatabaseBackupPath=\\virtualserver1\Database Backups

echo.
echo Restore WebServer Database
FOR /F "delims=|" %%I IN ('DIR "%DatabaseBackupPath%\WebServer\*.bak" /B /O:D') DO SET NewestFile=%%I
copy "%DatabaseBackupPath%\WebServer\%NewestFile%" "D:\"

sqlcmd -U <username> -P <password> -d master -Q ^
"RESTORE DATABASE [ExampleDatabaseName] ^
FROM  DISK = N'D:\%NewestFile%' ^
WITH  FILE = 1,  ^
MOVE N'Example_CS' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example.mdf',  ^
MOVE N'Example_CS_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example_1.LDF',  ^
NOUNLOAD,  STATS = 10"

Para permitir que isso o trabalho com nomes de arquivos usando espaços, é necessária uma versão modificada da resposta aceita:

FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END

@ Chris Noe

Note que o espaço em frente ao e se torna parte do comando anterior. Isso tem me mordido com SET, que felizmente coloca espaços em branco para o valor.

Para contornar a de espaços extras a ser adicionado a uma variável de ambiente, envolva o comando set em parênteses.

por exemplo. FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)

Eu sei que você pediu para Windows, mas pensei que eu gostaria de acrescentar isso de qualquer maneira, em Unix / Linux você poderia fazer:

cp `ls -t1 | head -1` /somedir/

que irá listar todos os arquivos no diretório atual classificadas por tempo de modificação e, em seguida, cp do mais recente para / somedir /

Isto irá abrir uma segunda janela cmd. Se você quer que ele vá embora, substitua o / K com / C.

Obviamente, substituir new_file_loc com o que o seu novo local de arquivo será.

@echo off
for /F %%i in ('dir /B /O:-D *.txt') do (
    call :open "%%i"
    exit /B 0
)
:open
    start "window title" "cmd /K copy %~1 new_file_loc"
exit /B 0
@echo off
set source="C:\test case"
set target="C:\Users\Alexander\Desktop\random folder"

FOR /F "delims=" %%I IN ('DIR %source%\*.* /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I & GOTO :END
:END
TIMEOUT 4

A minha tentativa de copiar o novo arquivo de uma pasta

apenas definir suas pastas de origem e de destino e ele deve funcionar

Este pastas ignora-se apenas com preocupação arquivos

recomendaria que você escolher filetype no caminho DIR mudando *.* para *.zip por exemplo

TIMEOUT não vai funcionar no WinXP Acho

Bash:

 find -type f -printf "%T@ %p \n" \
     | sort  \
     | tail -n 1  \
     | sed -r "s/^\S+\s//;s/\s*$//" \
     | xargs -iSTR cp STR newestfile

onde "newestfile" vai se tornar o newestfile

Como alternativa, você poderia fazer newdir / STR ou apenas newdir

Breakdown:

  1. lista todos os arquivos em {time} {file} formato.
  2. tipo los pelo tempo
  3. começar o último
  4. cut off do tempo, e espaço em branco do início / fim
  5. Copiar valor resultante

Importante

Depois de executar esta vez, o mais novo arquivo será o que você acabou de copiar: p (assumindo que ambos estão no mesmo escopo da pesquisa que é). Então você pode ter que ajustar o que filenumber você copiar se você quer este trabalho mais de uma vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top