1 (изменено: Qp, 2023-07-07 03:48:13)

Тема: AHK: Не срабатывает ErrorLevel в цикле

Здравствуйте!
Захотел раскидать файлы по подпапкам. С помощью Гугла и этого форума написал скрипт. Он отработал на отлично, но не остановился, когда должен был. Хотелось бы понять, на будущее.

;раскидывает файлы по подпапкам:
/*
в цикле - Loop
создаёт новую папку - FileCreateDir
задержка, чтобы успевало создавать папку - Sleep
выделяет - Loop http://forum.script-coding.com/viewtopic.php?id=13425
и перемещает 10 файлов с расширением в новую папку - FileMove
A_LoopFileLongPath - путь к файлу, ВКЛЮЧАЯ САМ ФАЙЛ
кончились файлы - ErrorLevel != 0
завершение скрипта - ExitApp */

1::
counter := 0

Loop
{
	counter++
	FileCreateDir, D:\wallpapers\%counter%
	Sleep, 500

	Loop, D:\wallpapers\*.*
		if A_Index < 11
			FileMove, %A_LoopFileLongPath%, D:\wallpapers\%counter%
		if (ErrorLevel != 0)	;НЕ РАБОТАЕТ! Шпарит, создаёт папки, когда файлы уже кончились!
			ExitApp
}

2::
return

2

Re: AHK: Не срабатывает ErrorLevel в цикле

А в результате чего должен ErrorLevel появиться?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Не срабатывает ErrorLevel в цикле

В результате отсутствия файла, я полагал.

4

Re: AHK: Не срабатывает ErrorLevel в цикле

Qp пишет:

В результате отсутствия файла, я полагал.

http://www.script-coding.com/AutoHotkey/FileMove.html

Однако, если источник - одиночный файл (не шаблон) и если он не существует, ErrorLevel устанавливается в 0. Чтобы отследить такую ситуацию, используйте IfExist или FileExist() для проверки существования файла-источника перед его перемещением.

5

Re: AHK: Не срабатывает ErrorLevel в цикле

Тут ситуации отсутствия файла даже не возникнет, так как Loop, D:\wallpapers\*.* будет перебирать только существующие файлы, и остановится, когда они кончатся.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ Qp

6

Re: AHK: Не срабатывает ErrorLevel в цикле

teadrinker пишет:

так как Loop, D:\wallpapers\*.* будет перебирать только существующие файлы, и остановится, когда они кончатся

Вот! С пониманием механизма пришло и решение:

1::
counter := 0

Loop
{
	counter++
	FileCreateDir, D:\test\%counter%
	Sleep, 500

	aindex_2 := 0
	Loop, D:\test\*.*
	{
		if (A_Index < 11)
			FileMove, %A_LoopFileLongPath%, D:\test\%counter%
			
		aindex_2 := A_Index
	}
	if (aindex_2 < 10)
		ExitApp
}
2::
return

Корявенькое, но работает.

7

Re: AHK: Не срабатывает ErrorLevel в цикле

Qp пишет:
if (aindex_2 < 10)
		ExitApp

А если число файлов в папке будет кратно 10?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Не срабатывает ErrorLevel в цикле

Разложит их все по папкам, создаст одну пустую, и закроется. Я ж говорю, корявенько. Но это стократ лучше ручного раскладывания пары тысяч файлов.