批处理笔记(2) - 获取目录名、文件名或路径

以前在电商团队,小伙伴每天要处理很多商品文件,上千个商品找对应文件不方便。早先不知道有Everything这个工具,自己用C#写了快速搜寻和定位文件、目录的小工具,其中路径数据获取,用C#生成批处理文件执行调用实现,然后关键字匹配找目录和文件,还可以作用于局域网。

批处理部分代码如下:

要执行,保存代码到获取目录文件名或路径.bat执行,拖一个目录进去回车,按提示选择对应数字序数操作。

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
@echo off
@REM @Author: xianghongai@gmail.com
title 获取目录文件名或路径 by:小可(xianghongai@gmail.com)
SETLOCAL ENABLEDELAYEDEXPANSION

:GTBegin
cls
@echo 获取目录文件名或路径
@echo -----------------------------
set HandleDirTemp=:
set /p HandleDirTemp=需获取的目录:

rem 去除可能存在的双引号
set "HandleDirTemp=%HandleDirTemp:"=%"

if "%HandleDirTemp%"==":" goto GTBegin

if not exist "%HandleDirTemp%" goto GTBegin

for %%i in ("%HandleDirTemp%") do if /i "%%~di"==%%i goto GTBegin

set "HandleDir=%HandleDirTemp%"

if not "%HandleDirTemp:~-1%"=="\" set "HandleDir=%HandleDirTemp%\"

rem set "HandleDir=%HandleDirTemp%\"
rem set "HandleDir=%HandleDir:\\=\%"
rem set "op=%op:~,-1%"

pushd "%HandleDir%"
cd /d "%HandleDir%">nul 2>nul || exit
set CurrentDir=%HandleDir%
popd

:GTCONTINUE
cls
@echo 获取目录文件名或路径
@echo -----------------------------
@echo 处理目录:%CurrentDir%
@echo.
@echo 1 - 退出
@echo 2 - 所有目录和文件路径
@echo 3 - 所有目录路径
@echo 4 - 指定格式的文件路径
@echo 5 - 所有目录名和文件名
@echo 6 - 所有层级目录名
@echo 7 - 所有层级文件名
@echo 8 - 当前层级目录名
@echo 9 - 当前层级文件名
@echo 0 - 重新设置目录
@echo.
@ set /p GTOperator="选择操作编号,按回车键: "
@echo.

set varDir= %~dp0
set varTimeTemp1=%time: =0%
set varTimeTemp2=%varTimeTemp1::=%
set varTime=%varTimeTemp2:~0,6%
set varDate=%date:~0,4%%date:~5,2%%date:~8,2%%varTime%

if /i "%GTOperator%"=="1" goto GTExit
if /i "%GTOperator%"=="2" goto GTDIRFILEPATH
if /i "%GTOperator%"=="3" goto GTDIRPATH
if /i "%GTOperator%"=="4" goto GTFILEPATHCUSTOMFORMAT
if /i "%GTOperator%"=="5" goto GTDIRFILENAME
if /i "%GTOperator%"=="6" goto GTDIRNAME
if /i "%GTOperator%"=="7" goto GTFILESNAME
if /i "%GTOperator%"=="8" goto GTDIRNAMECURRENT
if /i "%GTOperator%"=="9" goto GTFILESNAMECURRENT
if /i "%GTOperator%"=="0" goto GTBegin

echo 输入正确的操作编号
pause >nul
goto GTCONTINUE

:GTDIRFILEPATH
set ListFileName=所有目录和文件路径
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /b /s "%HandleDir%"') do echo %%~a >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTDIRPATH
set ListFileName=所有目录
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /ad /b /s "%HandleDir%"') do echo %%~a >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTFILEPATHCUSTOMFORMAT
@ set /p FileExtension="文件扩展名(*.jpg/*.gif/*.png/*.mp4/*.mp3/*.exe/*.txt …):"
set ListFileName=指定格式的文件路径
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /b /s "%HandleDir%"%FileExtension%') do echo %%~a >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTDIRFILENAME
set ListFileName=所有目录和文件名
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /b /s "%HandleDir%"') do echo %%~nxa >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTDIRNAME
set ListFileName=所有目录名
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /ad /b /s "%HandleDir%"') do echo %%~nxa >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTFILESNAME
set ListFileName=所有文件名
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /a-d /b /s "%HandleDir%"') do echo %%~nxa >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTDIRNAMECURRENT
set ListFileName=当前层级目录名
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /ad /b "%HandleDir%"') do echo %%~nxa >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTFILESNAMECURRENT
set ListFileName=当前层级文件名
set LISTFilePath=%varDir%%ListFileName%-%varDate%.txt
@echo 需要一点时间,请耐心等待...
for /f "delims=" %%a in ('dir /a-d /b "%HandleDir%"') do echo %%~nxa >> %LISTFilePath%
if not exist %LISTFilePath% goto GTNODOC
:: echo 完成操作
start %LISTFilePath%
:: pause >nul
goto GTCONTINUE

:GTNODOC
echo %CurrentDir% 没有相关目录或文档!
pause >nul
goto GTCONTINUE


:GTExit
exit

(本篇结束)

许可协议:自由转载-保持署名-非商业性使用-禁止演绎 (CC BY-NC-ND 4.0)

By 小可 from https://xinlu.ink/tech/batch-in-action-2-get-path.html