2015-08-22 2 views
0

У меня есть сценарий для запуска в окне unix, который ищет последний файл в каталоге и записывает имя этого файла в новый файл. ПохожеКак создать пакетный файл из сценария оболочки

ls -t|head -n 1 >> ../latestfile.txt 

Однако теперь я должен получить это работать на коробке окна и сказали, что это должно быть .bat. Может ли кто-нибудь помочь с тем, как это будет выглядеть?

+1

Это не сценарий, это одна команда. Я предлагаю вам ознакомиться с документацией среды оболочки, которую вы хотите использовать на платформе MS-Windows. Это должно показать вам, какие команды доступны там и какие опции распознаются. – arkascha

+0

Ответ @foxidrive кажется лучшим, когда вы не можете развить систему. PowerShell - это более сложное решение, приятное, когда вам приходится много делать в окнах. –

ответ

1

Ваш лучший выбор - установить Cygwin и назвать его днем.

Cygwin большая коллекция GNU и Open Source инструментов, которые обеспечивают функциональность, аналогичную распределению Linux на Windows.

После этого вы должны быть в состоянии выполнить эту команду из обычной командной строки Windows, пакетный файл или запланированное задание.

1

Это дает тот же результат.

@echo off 
:latest file 
for /f "delims=" %%a in ('dir /b /od /a-d') do >"latestfile.txt" echo %%a 
+0

Спасибо @foxidrive. У меня нет доступа к среде, поэтому я не могу проверить. Это третья компания, с которой мы работаем, но я передам это им. Еще раз спасибо! –

+0

Вы должны использовать '>>' вместо '>', и вам нужно 'GOTO' прервать цикл после того, как будет указана первая (новейшая) запись. – dbenham

+0

@dbenham Я скрывал подражание своему коду в одной строке Dave - он действительно заканчивается только последним именем файла в файле. Это нормально для небольшой группы файлов, но если в папке есть 4,4 миллиона файлов, это займет немного больше времени, чем обычно. :) – foxidrive

0

Эквивалент для ls -t в ОС Windows cmd может быть:

  • dir /B /TC /OD /A-D - отсортировано (см /OD) по дате создания & времени (см /TC);
  • dir /B /TW /OD /A-D - сортирован (см /OD) по последней записи даты & времени (см /TW): то же самое, если /T переключатель опущен на всех.

head -n 1 эквивалент: чтобы получить самую последнюю имя файла (добавить /TC переключатель при желании), то есть последний элемент в dir /b выходе переменной:

for /F "delims=" %G in ('dir /B /OD /A-D') do set "_lastfile=%~G" 

Следующая .bat должен работать (примечание удвоилась % в имя переменной цикла %%G) и добавьте строку, содержащую имя файла (включая расширение, если нет, путь) недавно измененного файла из текущего каталога в ..\latestfile.txt. Здесь ..\ означает родительскую папку текущего каталога.

@echo OFF 
setlocal EnableExtensions 
set "_lastfile="     empty the `_lastfile` variable 
for /F "delims=" %%G in ('dir /B /OD /A-D') do set "_lastfile=%%~G" 
>> ..\latestfile.txt echo(%_lastfile% 

Чтобы добавить полное имя файла, измените последнюю строку следующим образом:

>> ..\latestfile.txt echo(%CD%\%_lastfile% 

Ресурсы (требуется для чтения):

+0

спасибо за это и за ресурсы. Я получу их в понедельник, так как у меня нет доступа к среде. –

Смежные вопросы