Мне нужно скопировать новейший файл в каталог в новое место. До сих пор я нашел ресурсы в forfiles, вопрос, связанный с датой здесь и еще один связанный вопрос. У меня просто есть проблемы с тем, чтобы собрать кусочки! Как скопировать новый файл в этот каталог на новое место?
Как написать пакет Windows script для копирования самого нового файла из каталога?
Ответ 1
оболочка Windows, один лайнер:
FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT
Ответ 2
Принятый ответ дает пример использования самого нового файла в команде, а затем выхода. Если вам нужно сделать это в файле bat с другими сложными операциями, вы можете использовать следующее, чтобы сохранить имя файла нового файла в переменной:
FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I
Теперь вы можете ссылаться на% NewestFile% на всю оставшуюся часть вашего файла bat.
Например, вот что мы используем для получения последней версии файла базы данных .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"
Ответ 3
Чтобы разрешить это работать с именами файлов с использованием пробелов, необходима модифицированная версия принятого ответа:
FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END
Ответ 4
Я знаю, что вы попросили Windows, но я подумал, что все равно добавлю это в Unix/Linux:
cp `ls -t1 | head -1` /somedir/
Будет отображаться список всех файлов в текущем каталоге, отсортированных по времени модификации, а затем cp самого последнего в/somedir/
Ответ 5
Это откроет второе окно 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
Ответ 6
@Крис Ной
Обратите внимание, что пространство перед и становится частью предыдущей команды. Это укусило меня с помощью SET, который с радостью помещает конечные пробелы в значение.
Чтобы обойти добавочное пространство, добавляемое к переменной среды, оберните команду set в parens.
например. FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)
Ответ 7
@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
Моя попытка скопировать новый файл из папки
просто установите исходные и целевые папки, и он должен работать
Это игнорирует папки, которые относятся только к файлам
Рекомендуем выбрать тип файла в пути DIR с изменением *.*
на *.zip
например
TIMEOUT не будет работать на winXP. Думаю,
Ответ 8
Bash:
find -type f -printf "%[email protected] %p \n" \
| sort \
| tail -n 1 \
| sed -r "s/^\S+\s//;s/\s*$//" \
| xargs -iSTR cp STR newestfile
где "новейший файл" станет новейшим файлом
вы можете сделать newdir/STR или просто newdir
Разбивка:
- перечислить все файлы в формате {time} {file}.
- сортировать по времени
- получить последний
- отрезать время и пробелы от начала/конца
- копировать итоговое значение
Важно
После запуска этого один раз самый новый файл будет тем, что вы только что скопировали: p (при условии, что они оба находятся в той же области поиска, что и). Поэтому вам, возможно, придется настроить, какой номер файла вы копируете, если вы хотите, чтобы это работало более одного раза.