ディレクトリ内の最新のファイルを新しい場所にコピーする必要があります。これまでのところ、 forfiles コマンド、 日付関連の質問 ここ、および別の 関連質問 に関するリソースを見つけました。ピースをまとめるのにちょっと苦労しています!そのディレクトリ内の最新のファイルを新しい場所にコピーするにはどうすればよいですか?
Windowsシェル、ライナー1つ:
FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT
受け入れられた回答は、コマンドで最新のファイルを使用して終了する例を示しています。他の複雑な操作を含むbatファイルでこれを行う必要がある場合は、次を使用して最新のファイルのファイル名を変数に保存できます。
FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I
これで、残りのbatファイル全体で%NewestFile%を参照できます。
たとえば、ディレクトリからデータベース.bakファイルの最新バージョンを取得し、それをサーバーにコピーしてから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"
スペースを使用してファイル名でこれを機能させるには、受け入れられた回答の修正バージョンが必要です。
FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END
@クリス・ノエ
&の前のスペースは、前のコマンドの一部になることに注意してください。 SETを使用すると、値に末尾の空白が追加されます。
環境変数に追加される末尾スペースを回避するには、setコマンドを括弧で囲みます。
例えば。 FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)
@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
フォルダーから最新のファイルをコピーしようとした
ソースとターゲットのフォルダを設定するだけで動作するはずです
これはフォルダを無視し、ファイルのみに関心があります
*.*
から*.Zip
例えば
タイムアウトはwinXPでは機能しません
あなたがWindowsを要求したことは知っていますが、とにかくこれを追加すると思いました、Unix/Linuxでは次のことができます:
cp `ls -t1 | head -1` /somedir/
これは、現在のディレクトリ内のすべてのファイルを変更時刻でソートしてリストし、最新のものを/ somedir /にcpします
これにより、2番目のcmd.exeウィンドウが開きます。削除したい場合は、/ Kを/ Cに置き換えます。
明らかに、new_file_locを新しいファイルの場所に置き換えます。
@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