automation-lib 6.4.39 → 6.4.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commit.bat +5 -7
- package/dist/index.d.mts +20 -11
- package/dist/index.d.ts +20 -11
- package/docs.txt +2 -2
- package/package.json +1 -1
- package/read-file-path.bat +81 -81
package/commit.bat
CHANGED
|
@@ -7,12 +7,10 @@ git add .
|
|
|
7
7
|
echo Committing changes...
|
|
8
8
|
set /p commit_message="Enter commit message: "
|
|
9
9
|
git commit -m "%commit_message%"
|
|
10
|
-
|
|
10
|
+
sleep 2
|
|
11
11
|
|
|
12
12
|
:: Push changes to the 'main' branch of the 'cp' remote
|
|
13
|
-
git pull
|
|
14
|
-
timeout /t 2 /nobreak >nul
|
|
15
|
-
git pull hs main
|
|
13
|
+
git pull origin toan
|
|
16
14
|
|
|
17
15
|
:: Read the current version from package.json
|
|
18
16
|
for /f "tokens=2 delims=:, " %%i in ('findstr "version" package.json') do set currentVersion=%%i
|
|
@@ -43,10 +41,10 @@ echo New version: %newVersion%
|
|
|
43
41
|
call npm run pub
|
|
44
42
|
|
|
45
43
|
git add .
|
|
46
|
-
|
|
44
|
+
sleep 1
|
|
47
45
|
git commit -m "%commit_message%"
|
|
48
|
-
|
|
46
|
+
sleep 2
|
|
49
47
|
|
|
50
|
-
git push
|
|
48
|
+
git push origin toan
|
|
51
49
|
|
|
52
50
|
|
package/dist/index.d.mts
CHANGED
|
@@ -14006,7 +14006,7 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14006
14006
|
typeIdea: ETypeManagerWorkClassify;
|
|
14007
14007
|
createdAt: Date;
|
|
14008
14008
|
updatedAt: Date;
|
|
14009
|
-
toolAuto:
|
|
14009
|
+
toolAuto: "Browser Automation";
|
|
14010
14010
|
taskToolKeyAiGen: string;
|
|
14011
14011
|
statusImageVideoVoice: ETaskStatus;
|
|
14012
14012
|
currentStepImageVideoVoice: number;
|
|
@@ -14042,7 +14042,7 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14042
14042
|
}>;
|
|
14043
14043
|
infoBrowserInfo: {
|
|
14044
14044
|
browserName: string;
|
|
14045
|
-
browserType:
|
|
14045
|
+
browserType: "GPM";
|
|
14046
14046
|
listProxy: Array<{
|
|
14047
14047
|
proxyFormat: string;
|
|
14048
14048
|
proxyType: ETypeProxy;
|
|
@@ -14064,7 +14064,7 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14064
14064
|
}>;
|
|
14065
14065
|
infoGenVoice: {
|
|
14066
14066
|
model: string;
|
|
14067
|
-
modeVoice:
|
|
14067
|
+
modeVoice: "Multi Speaker Audio";
|
|
14068
14068
|
modelSetting: string;
|
|
14069
14069
|
language: string;
|
|
14070
14070
|
totalVoice: number;
|
|
@@ -14103,11 +14103,11 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14103
14103
|
urlFolderDrive: string;
|
|
14104
14104
|
result: Array<{
|
|
14105
14105
|
timestamp: Date;
|
|
14106
|
-
typeTask:
|
|
14106
|
+
typeTask: "Image" | "Video";
|
|
14107
14107
|
taskName: string;
|
|
14108
14108
|
status: string;
|
|
14109
14109
|
timeGenerate: number;
|
|
14110
|
-
typeAction:
|
|
14110
|
+
typeAction: "Tool" | "Api";
|
|
14111
14111
|
message: string;
|
|
14112
14112
|
}>;
|
|
14113
14113
|
};
|
|
@@ -14123,16 +14123,18 @@ interface CanvaDetailInstagramDto {
|
|
|
14123
14123
|
typeIdea: ETypeManagerWorkClassify;
|
|
14124
14124
|
createdAt: Date;
|
|
14125
14125
|
updatedAt: Date;
|
|
14126
|
-
toolAuto:
|
|
14126
|
+
toolAuto: "Canva";
|
|
14127
14127
|
taskToolKeyCanva: string;
|
|
14128
14128
|
currentStepCanva: number;
|
|
14129
14129
|
totalStepCanva: number;
|
|
14130
14130
|
statusCanva: ETaskStatus;
|
|
14131
14131
|
timeStatusCanvaChange: Date;
|
|
14132
|
+
statusEditCanva: ETaskStatus;
|
|
14132
14133
|
totalSecondsGenerateCanva: number;
|
|
14133
14134
|
countRunCanva: number;
|
|
14134
14135
|
retryCountCanva: number;
|
|
14135
14136
|
urlAI: string;
|
|
14137
|
+
styleName: string;
|
|
14136
14138
|
model: EModelImageVideo;
|
|
14137
14139
|
ratio: ERatioImage;
|
|
14138
14140
|
typeTaskCanva: ETaskGenerateAIType;
|
|
@@ -14152,7 +14154,7 @@ interface CanvaDetailInstagramDto {
|
|
|
14152
14154
|
}>;
|
|
14153
14155
|
infoBrowserInfo: {
|
|
14154
14156
|
browserName: string;
|
|
14155
|
-
browserType:
|
|
14157
|
+
browserType: "GPM";
|
|
14156
14158
|
listProxy: Array<{
|
|
14157
14159
|
proxyFormat: string;
|
|
14158
14160
|
proxyType: ETypeProxy;
|
|
@@ -14183,7 +14185,7 @@ interface CanvaDetailInstagramDto {
|
|
|
14183
14185
|
effectPage27: string;
|
|
14184
14186
|
};
|
|
14185
14187
|
infoCanvaEditPage: Array<{
|
|
14186
|
-
page:
|
|
14188
|
+
page: "Page1" | "Page2" | "Page3" | "Page4" | "Page5" | "Page6" | "Page7";
|
|
14187
14189
|
status: ETaskStatus;
|
|
14188
14190
|
time: number;
|
|
14189
14191
|
retry: number;
|
|
@@ -14217,8 +14219,8 @@ interface CanvaDetailInstagramDto {
|
|
|
14217
14219
|
result: Array<{
|
|
14218
14220
|
timestamp: Date;
|
|
14219
14221
|
status: ETaskStatus;
|
|
14220
|
-
typeAction:
|
|
14221
|
-
page:
|
|
14222
|
+
typeAction: "Edit";
|
|
14223
|
+
page: "Page1" | "Page2" | "Page3" | "Page4" | "Page5" | "Page6" | "Page7";
|
|
14222
14224
|
background: string;
|
|
14223
14225
|
frontText: string;
|
|
14224
14226
|
effect: string;
|
|
@@ -14469,6 +14471,12 @@ interface DataUpsertImageVideoVoiceCanvaInstagramDto {
|
|
|
14469
14471
|
code2FABackup: string;
|
|
14470
14472
|
}>;
|
|
14471
14473
|
accountAIUsedId: string;
|
|
14474
|
+
listAccountCanva: Array<{
|
|
14475
|
+
email: string;
|
|
14476
|
+
password: string;
|
|
14477
|
+
code2FA: string;
|
|
14478
|
+
}>;
|
|
14479
|
+
accountCanvaUsedId: string;
|
|
14472
14480
|
subjectImageUrl: string;
|
|
14473
14481
|
sceneImageUrl: string[];
|
|
14474
14482
|
styleImageUrl: string;
|
|
@@ -14594,7 +14602,7 @@ interface ITaskAIAvatarCoverInstagram extends IBaseModel, ITrackingModel {
|
|
|
14594
14602
|
sheetUrl: string;
|
|
14595
14603
|
sheetName: string;
|
|
14596
14604
|
rowID: string;
|
|
14597
|
-
toolAuto:
|
|
14605
|
+
toolAuto: "Browser Automation";
|
|
14598
14606
|
taskToolKeyAiGen: string;
|
|
14599
14607
|
pc: string | IPCBrowser;
|
|
14600
14608
|
accountSocial: string | IInstagramAccountRaw;
|
|
@@ -14660,6 +14668,7 @@ interface ITaskAIImageVideoVoiceCanvaInstagram extends IBaseModel, ITrackingMode
|
|
|
14660
14668
|
proxyMain: string | IProxy;
|
|
14661
14669
|
accountDriveMain: string | IAccountDrive;
|
|
14662
14670
|
accountAIMain: string | IAccountAI;
|
|
14671
|
+
accountCanvaMain: string | IAccountCanva;
|
|
14663
14672
|
subjectImageUrl: string;
|
|
14664
14673
|
sceneImageUrl: string[];
|
|
14665
14674
|
styleImageUrl: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -14006,7 +14006,7 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14006
14006
|
typeIdea: ETypeManagerWorkClassify;
|
|
14007
14007
|
createdAt: Date;
|
|
14008
14008
|
updatedAt: Date;
|
|
14009
|
-
toolAuto:
|
|
14009
|
+
toolAuto: "Browser Automation";
|
|
14010
14010
|
taskToolKeyAiGen: string;
|
|
14011
14011
|
statusImageVideoVoice: ETaskStatus;
|
|
14012
14012
|
currentStepImageVideoVoice: number;
|
|
@@ -14042,7 +14042,7 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14042
14042
|
}>;
|
|
14043
14043
|
infoBrowserInfo: {
|
|
14044
14044
|
browserName: string;
|
|
14045
|
-
browserType:
|
|
14045
|
+
browserType: "GPM";
|
|
14046
14046
|
listProxy: Array<{
|
|
14047
14047
|
proxyFormat: string;
|
|
14048
14048
|
proxyType: ETypeProxy;
|
|
@@ -14064,7 +14064,7 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14064
14064
|
}>;
|
|
14065
14065
|
infoGenVoice: {
|
|
14066
14066
|
model: string;
|
|
14067
|
-
modeVoice:
|
|
14067
|
+
modeVoice: "Multi Speaker Audio";
|
|
14068
14068
|
modelSetting: string;
|
|
14069
14069
|
language: string;
|
|
14070
14070
|
totalVoice: number;
|
|
@@ -14103,11 +14103,11 @@ interface ImageVideoVoiceDetailInstagramDto {
|
|
|
14103
14103
|
urlFolderDrive: string;
|
|
14104
14104
|
result: Array<{
|
|
14105
14105
|
timestamp: Date;
|
|
14106
|
-
typeTask:
|
|
14106
|
+
typeTask: "Image" | "Video";
|
|
14107
14107
|
taskName: string;
|
|
14108
14108
|
status: string;
|
|
14109
14109
|
timeGenerate: number;
|
|
14110
|
-
typeAction:
|
|
14110
|
+
typeAction: "Tool" | "Api";
|
|
14111
14111
|
message: string;
|
|
14112
14112
|
}>;
|
|
14113
14113
|
};
|
|
@@ -14123,16 +14123,18 @@ interface CanvaDetailInstagramDto {
|
|
|
14123
14123
|
typeIdea: ETypeManagerWorkClassify;
|
|
14124
14124
|
createdAt: Date;
|
|
14125
14125
|
updatedAt: Date;
|
|
14126
|
-
toolAuto:
|
|
14126
|
+
toolAuto: "Canva";
|
|
14127
14127
|
taskToolKeyCanva: string;
|
|
14128
14128
|
currentStepCanva: number;
|
|
14129
14129
|
totalStepCanva: number;
|
|
14130
14130
|
statusCanva: ETaskStatus;
|
|
14131
14131
|
timeStatusCanvaChange: Date;
|
|
14132
|
+
statusEditCanva: ETaskStatus;
|
|
14132
14133
|
totalSecondsGenerateCanva: number;
|
|
14133
14134
|
countRunCanva: number;
|
|
14134
14135
|
retryCountCanva: number;
|
|
14135
14136
|
urlAI: string;
|
|
14137
|
+
styleName: string;
|
|
14136
14138
|
model: EModelImageVideo;
|
|
14137
14139
|
ratio: ERatioImage;
|
|
14138
14140
|
typeTaskCanva: ETaskGenerateAIType;
|
|
@@ -14152,7 +14154,7 @@ interface CanvaDetailInstagramDto {
|
|
|
14152
14154
|
}>;
|
|
14153
14155
|
infoBrowserInfo: {
|
|
14154
14156
|
browserName: string;
|
|
14155
|
-
browserType:
|
|
14157
|
+
browserType: "GPM";
|
|
14156
14158
|
listProxy: Array<{
|
|
14157
14159
|
proxyFormat: string;
|
|
14158
14160
|
proxyType: ETypeProxy;
|
|
@@ -14183,7 +14185,7 @@ interface CanvaDetailInstagramDto {
|
|
|
14183
14185
|
effectPage27: string;
|
|
14184
14186
|
};
|
|
14185
14187
|
infoCanvaEditPage: Array<{
|
|
14186
|
-
page:
|
|
14188
|
+
page: "Page1" | "Page2" | "Page3" | "Page4" | "Page5" | "Page6" | "Page7";
|
|
14187
14189
|
status: ETaskStatus;
|
|
14188
14190
|
time: number;
|
|
14189
14191
|
retry: number;
|
|
@@ -14217,8 +14219,8 @@ interface CanvaDetailInstagramDto {
|
|
|
14217
14219
|
result: Array<{
|
|
14218
14220
|
timestamp: Date;
|
|
14219
14221
|
status: ETaskStatus;
|
|
14220
|
-
typeAction:
|
|
14221
|
-
page:
|
|
14222
|
+
typeAction: "Edit";
|
|
14223
|
+
page: "Page1" | "Page2" | "Page3" | "Page4" | "Page5" | "Page6" | "Page7";
|
|
14222
14224
|
background: string;
|
|
14223
14225
|
frontText: string;
|
|
14224
14226
|
effect: string;
|
|
@@ -14469,6 +14471,12 @@ interface DataUpsertImageVideoVoiceCanvaInstagramDto {
|
|
|
14469
14471
|
code2FABackup: string;
|
|
14470
14472
|
}>;
|
|
14471
14473
|
accountAIUsedId: string;
|
|
14474
|
+
listAccountCanva: Array<{
|
|
14475
|
+
email: string;
|
|
14476
|
+
password: string;
|
|
14477
|
+
code2FA: string;
|
|
14478
|
+
}>;
|
|
14479
|
+
accountCanvaUsedId: string;
|
|
14472
14480
|
subjectImageUrl: string;
|
|
14473
14481
|
sceneImageUrl: string[];
|
|
14474
14482
|
styleImageUrl: string;
|
|
@@ -14594,7 +14602,7 @@ interface ITaskAIAvatarCoverInstagram extends IBaseModel, ITrackingModel {
|
|
|
14594
14602
|
sheetUrl: string;
|
|
14595
14603
|
sheetName: string;
|
|
14596
14604
|
rowID: string;
|
|
14597
|
-
toolAuto:
|
|
14605
|
+
toolAuto: "Browser Automation";
|
|
14598
14606
|
taskToolKeyAiGen: string;
|
|
14599
14607
|
pc: string | IPCBrowser;
|
|
14600
14608
|
accountSocial: string | IInstagramAccountRaw;
|
|
@@ -14660,6 +14668,7 @@ interface ITaskAIImageVideoVoiceCanvaInstagram extends IBaseModel, ITrackingMode
|
|
|
14660
14668
|
proxyMain: string | IProxy;
|
|
14661
14669
|
accountDriveMain: string | IAccountDrive;
|
|
14662
14670
|
accountAIMain: string | IAccountAI;
|
|
14671
|
+
accountCanvaMain: string | IAccountCanva;
|
|
14663
14672
|
subjectImageUrl: string;
|
|
14664
14673
|
sceneImageUrl: string[];
|
|
14665
14674
|
styleImageUrl: string;
|
package/docs.txt
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
############ Cấu hình npm ############
|
|
1
|
+
|
|
2
|
+
############ Cấu hình npm ############
|
|
3
3
|
npm config set //registry.npmjs.org/:_authToken {token}
|
package/package.json
CHANGED
package/read-file-path.bat
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
n@echo off
|
|
2
|
-
setlocal enabledelayedexpansion
|
|
3
|
-
chcp 65001 >nul
|
|
4
|
-
echo ====================================
|
|
5
|
-
echo FILE SEARCH AND LIST UTILITY
|
|
6
|
-
echo ====================================
|
|
7
|
-
echo.
|
|
8
|
-
|
|
9
|
-
set /p folder_path="Enter folder path: "
|
|
10
|
-
|
|
11
|
-
if not exist "%folder_path%" (
|
|
12
|
-
echo.
|
|
13
|
-
echo [ERROR] Folder does not exist!
|
|
14
|
-
pause
|
|
15
|
-
exit /b
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
echo.
|
|
19
|
-
set /p file_pattern="Enter file name pattern (press Enter to list all files): "
|
|
20
|
-
|
|
21
|
-
if "%file_pattern%"=="" (
|
|
22
|
-
set search_mode=ALL_FILES
|
|
23
|
-
set output_file=all_files_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
|
|
24
|
-
) else (
|
|
25
|
-
set search_mode=PATTERN_SEARCH
|
|
26
|
-
set output_file=search_%file_pattern:_=_%_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
set output_file=%output_file: =0%
|
|
30
|
-
|
|
31
|
-
echo.
|
|
32
|
-
echo Searching files...
|
|
33
|
-
if "%search_mode%"=="PATTERN_SEARCH" (
|
|
34
|
-
echo Pattern: *%file_pattern%*
|
|
35
|
-
) else (
|
|
36
|
-
echo Listing all files...
|
|
37
|
-
)
|
|
38
|
-
echo.
|
|
39
|
-
|
|
40
|
-
echo ============ SEARCH RESULTS ============ > "%output_file%"
|
|
41
|
-
echo Folder: %folder_path% >> "%output_file%"
|
|
42
|
-
echo Time: %date% %time% >> "%output_file%"
|
|
43
|
-
if "%search_mode%"=="PATTERN_SEARCH" (
|
|
44
|
-
echo Search Pattern: *%file_pattern%* >> "%output_file%"
|
|
45
|
-
) else (
|
|
46
|
-
echo Search Mode: All Files >> "%output_file%"
|
|
47
|
-
)
|
|
48
|
-
echo ====================================== >> "%output_file%"
|
|
49
|
-
echo. >> "%output_file%"
|
|
50
|
-
|
|
51
|
-
set count=0
|
|
52
|
-
|
|
53
|
-
if "%search_mode%"=="ALL_FILES" (
|
|
54
|
-
for /r "%folder_path%" %%f in (*) do (
|
|
55
|
-
echo %%f
|
|
56
|
-
echo %%f >> "%output_file%"
|
|
57
|
-
set /a count+=1
|
|
58
|
-
)
|
|
59
|
-
) else (
|
|
60
|
-
for /r "%folder_path%" %%f in (*) do (
|
|
61
|
-
echo %%~nxf | findstr /i "%file_pattern%" >nul
|
|
62
|
-
if !errorlevel! equ 0 (
|
|
63
|
-
echo %%f
|
|
64
|
-
echo %%f >> "%output_file%"
|
|
65
|
-
set /a count+=1
|
|
66
|
-
)
|
|
67
|
-
)
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
echo.
|
|
71
|
-
echo ====================================
|
|
72
|
-
if "%search_mode%"=="PATTERN_SEARCH" (
|
|
73
|
-
echo Total matching files: %count%
|
|
74
|
-
) else (
|
|
75
|
-
echo Total files: %count%
|
|
76
|
-
)
|
|
77
|
-
echo Result saved to: %output_file%
|
|
78
|
-
echo ====================================
|
|
79
|
-
echo.
|
|
80
|
-
|
|
81
|
-
pause
|
|
1
|
+
n@echo off
|
|
2
|
+
setlocal enabledelayedexpansion
|
|
3
|
+
chcp 65001 >nul
|
|
4
|
+
echo ====================================
|
|
5
|
+
echo FILE SEARCH AND LIST UTILITY
|
|
6
|
+
echo ====================================
|
|
7
|
+
echo.
|
|
8
|
+
|
|
9
|
+
set /p folder_path="Enter folder path: "
|
|
10
|
+
|
|
11
|
+
if not exist "%folder_path%" (
|
|
12
|
+
echo.
|
|
13
|
+
echo [ERROR] Folder does not exist!
|
|
14
|
+
pause
|
|
15
|
+
exit /b
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
echo.
|
|
19
|
+
set /p file_pattern="Enter file name pattern (press Enter to list all files): "
|
|
20
|
+
|
|
21
|
+
if "%file_pattern%"=="" (
|
|
22
|
+
set search_mode=ALL_FILES
|
|
23
|
+
set output_file=all_files_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
|
|
24
|
+
) else (
|
|
25
|
+
set search_mode=PATTERN_SEARCH
|
|
26
|
+
set output_file=search_%file_pattern:_=_%_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
set output_file=%output_file: =0%
|
|
30
|
+
|
|
31
|
+
echo.
|
|
32
|
+
echo Searching files...
|
|
33
|
+
if "%search_mode%"=="PATTERN_SEARCH" (
|
|
34
|
+
echo Pattern: *%file_pattern%*
|
|
35
|
+
) else (
|
|
36
|
+
echo Listing all files...
|
|
37
|
+
)
|
|
38
|
+
echo.
|
|
39
|
+
|
|
40
|
+
echo ============ SEARCH RESULTS ============ > "%output_file%"
|
|
41
|
+
echo Folder: %folder_path% >> "%output_file%"
|
|
42
|
+
echo Time: %date% %time% >> "%output_file%"
|
|
43
|
+
if "%search_mode%"=="PATTERN_SEARCH" (
|
|
44
|
+
echo Search Pattern: *%file_pattern%* >> "%output_file%"
|
|
45
|
+
) else (
|
|
46
|
+
echo Search Mode: All Files >> "%output_file%"
|
|
47
|
+
)
|
|
48
|
+
echo ====================================== >> "%output_file%"
|
|
49
|
+
echo. >> "%output_file%"
|
|
50
|
+
|
|
51
|
+
set count=0
|
|
52
|
+
|
|
53
|
+
if "%search_mode%"=="ALL_FILES" (
|
|
54
|
+
for /r "%folder_path%" %%f in (*) do (
|
|
55
|
+
echo %%f
|
|
56
|
+
echo %%f >> "%output_file%"
|
|
57
|
+
set /a count+=1
|
|
58
|
+
)
|
|
59
|
+
) else (
|
|
60
|
+
for /r "%folder_path%" %%f in (*) do (
|
|
61
|
+
echo %%~nxf | findstr /i "%file_pattern%" >nul
|
|
62
|
+
if !errorlevel! equ 0 (
|
|
63
|
+
echo %%f
|
|
64
|
+
echo %%f >> "%output_file%"
|
|
65
|
+
set /a count+=1
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
echo.
|
|
71
|
+
echo ====================================
|
|
72
|
+
if "%search_mode%"=="PATTERN_SEARCH" (
|
|
73
|
+
echo Total matching files: %count%
|
|
74
|
+
) else (
|
|
75
|
+
echo Total files: %count%
|
|
76
|
+
)
|
|
77
|
+
echo Result saved to: %output_file%
|
|
78
|
+
echo ====================================
|
|
79
|
+
echo.
|
|
80
|
+
|
|
81
|
+
pause
|