-
Notifications
You must be signed in to change notification settings - Fork 71
/
GetAvailableFileName.ahk
111 lines (99 loc) · 2.92 KB
/
GetAvailableFileName.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
; Get next/free Available File Name by toralf
; http://www.autohotkey.com/forum/viewtopic.php?t=6297
GetAvailableFileName( GivenFileName, GivenPath = "", StartID = 1 )
{
;check if GivenPath exist and add "\" if necessary
If GivenPath is not space
{
StringRight, LastChar, GivenPath, 1
If ( LastChar <> "\" )
GivenPath = %GivenPath%\
If ( InStr(FileExist(GivenPath), "D") = 0 )
{
ErrorLevel = The given path >%GivenPath%< doesn't exist.
Return 0
}
}
;check if StartID is reasonable
If ( StartID < 0 Or Mod(StartID, 1) <> 0 )
{
ErrorLevel =
(LTrim
The StartID >%StartID%< is smaller then zero or not an integer.
It has to be a positive integer.
)
Return 0
}
;split GivenFileName with #
StringSplit, NameArray, GivenFileName, #
;if GivenFileName doesn't contain # ...
If NameArray0 < 2
{
;check if GivenFileName exists
If FileExist(GivenPath . GivenFileName)
{
ErrorLevel =
(LTrim
The given file >%GivenFileName%< does exist
in path >%GivenPath%<.
(if path is empty, it's the path of the script/exe)
)
Return 0
}
Else
Return GivenPath . GivenFileName
}
;check if StartID isn't too large
If ( StrLen(StartID) > NameArray0 - 1 )
{
ErrorLevel =
(LTrim
The StartID >%StartID%< is too large
for the filename >%GivenFileName%<.
)
Return 0
}
;Search from StartID ...
Loop
{
Number := A_Index + StartID - 1
;untill number is too large ...
If ( StrLen(Number) > NameArray0 - 1 )
{
ErrorLevel =
(LTrim
All files exist for >%GivenFileName%<
with all # between %StartID% and %Number%.
)
Return 0
}
;otherwise fill number with leading zeros
Loop, % NameArray0 - 1 - StrLen(Number) ;%
Number = 0%Number%
;split number in an array
StringSplit, NumberArray, Number
;mix and concatenate the names array with the numbers array
FileName =
Loop, %NameArray0%
FileName := FileName . NameArray%A_Index% . NumberArray%A_Index%
;check if GivenFileName doesn't exist
If not FileExist(GivenPath . FileName)
Return GivenPath . FileName
}
}
GetAvailableFileName_fast( GivenFileName, GivenPath = "", StartID = 1 )
{
StringSplit, NameArray, GivenFileName, #
Loop
{
Number := A_Index + StartID - 1
Loop, % NameArray0 - 1 - StrLen(Number) ;%
Number = 0%Number%
StringSplit, NumberArray, Number
FileName =
Loop, %NameArray0%
FileName := FileName . NameArray%A_Index% . NumberArray%A_Index%
If not FileExist(GivenPath . FileName)
Return GivenPath . FileName
}
}