Я нашел решение. Для завершения forkjoin необходимо завершить все наблюдаемые. В моем случае наблюдаемое в uploadService не было завершено. После того, как я отправил сообщение «Complete», я смог получить ответ.
Вы можете найти более новый из двух файлов с помощью одной строки пакетного сценария. Просто укажите файлы в порядке дат, сначала самые старые, что означает, что последний файл в списке должен быть более новым. Поэтому, если вы сохраняете имя файла каждый раз, последнее имя, указанное в вашей переменной, будет самым новым файлом.
Например:
SET FILE1=foo.txt
SET FILE2=bar.txt
FOR /F %%i IN ('DIR /B /O:D %FILE1% %FILE2%') DO SET NEWEST=%%i
ECHO %NEWEST% is (probably) newer.
Это, к сожалению, не справляется с одинаковыми отметками даты. Поэтому нам просто нужно сначала проверить, имеют ли файлы одинаковые отметки даты и времени:
SET FILE1=foo.txt
SET FILE2=bar.txt
FOR %%i IN (%FILE1%) DO SET DATE1=%%~ti
FOR %%i IN (%FILE2%) DO SET DATE2=%%~ti
IF "%DATE1%"=="%DATE2%" ECHO Files have same age && GOTO END
FOR /F %%i IN ('DIR /B /O:D %FILE1% %FILE2%') DO SET NEWEST=%%i
ECHO Newer file is %NEWEST%
:END
Я использовал бы xcopy для этого:
xcopy /L /D /Y PATH_TO_FILE1 PATH_TO_FILE2|findstr /B /C:"1 " && echo FILE1 is newer!
, поскольку xcopy всегда возвращает true в этом случае, необходимо отфильтровать его вывод с командой findstr.
Это - все, и это работает с различными путями.
серьезно, тебе стоит начать изучать кое-что еще. Это не шутка. DOS (cmd.exe) серьезно не хватает возможностей манипулирования датами и многих других недостатков. Вот следующая лучшая альтернатива, изначально предоставляемая помимо пакета DOS, vbscript
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile1 = objArgs(0)
strFile2 = objArgs(1)
Set objFile1 = objFS.GetFile(strFile1)
Set objFile2 = objFS.GetFile(strFile2)
If objFile1.DateLastModified < objFile2.DateLastModified Then
WScript.Echo "File1: "&strFile1&" is older than "&strFile2
Else
WScript.Echo "File1: "&strFile1&" is newer than "&strFile2
End If
запускать ее из командной строки
C:\test>dir
Volume in drive C has no label.
Volume Serial Number is 08AC-4F03
Directory of C:\test
11/06/2009 07:40 PM <DIR> .
11/06/2009 07:40 PM <DIR> ..
11/06/2009 06:26 PM 135 file
11/02/2009 04:31 PM 4,516 m.txt
C:\test>cscript /nologo test.vbs file m.txt
File1: file is newer than m.txt
Конечно, в более новых версиях Windows вы можете попробовать Powershell ...