Answers:
for /R %A in (*.*) do @echo %~nsA %~nA
不带子目录:
for %A in (*.*) do @echo %~nsA %~nA
添加隐藏文件:
for /F "tokens=*" %A in ('dir /B/A:-/S *') do @echo %~nsA %~nA
不带子目录:
for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA
如果只希望显示8.3名称,而使用“ dir / -n”,则在每行的开头将获得8.3名称。注意:它将扩展名和文件名用空格而不是句点分隔。
C:\Users\User>dir /-n
Volume in drive C has no label.
Volume Serial Number is 5C60-1B61
Directory of C:\Users\User
. <DIR> 01/28/2015 11:26 PM
.. <DIR> 01/28/2015 11:26 PM
Contacts <DIR> 12/27/2014 04:46 PM
Desktop <DIR> 01/25/2015 05:06 PM
DOCUME~1 <DIR> 01/27/2015 10:20 PM
DOWNLO~1 <DIR> 01/27/2015 10:10 PM
FAVORI~1 <DIR> 12/27/2014 04:46 PM
GOOGLE~1 <DIR> 01/28/2015 02:08 AM
Links <DIR> 01/25/2015 05:06 PM
Music <DIR> 12/27/2014 04:46 PM
Pictures <DIR> 12/27/2014 04:46 PM
SAVEDG~1 <DIR> 12/27/2014 04:46 PM
Searches <DIR> 12/27/2014 04:46 PM
TESTIN~1 TXT 8 01/28/2015 10:32 PM
TESTIN~2 BAT 175 01/28/2015 11:26 PM
TESTIN~1 BAT 164 01/28/2015 11:26 PM
UNIGIN~1 <DIR> 10/28/2014 07:01 PM
Videos <DIR> 12/27/2014 04:46 PM
3 File(s) 347 bytes
16 Dir(s) 3,896,034,717,696 bytes free
但是,您可以在批处理文件的for循环中使用“ dir / -n”,然后提取前12个字符的子字符串,以摆脱每一行的其余部分。例如:
@echo off
setlocal EnableDelayedExpansion
for /f "skip=7 tokens=*" %%i in ('dir /-n ^| find /v "File(s)" ^| find /v "Dir(s)"') do (
set x=%%i
echo !x:~0,12!
)
“ skip = 7”跳过前7行,这既不是文件名也不是目录名,并且“ dir / -n”的输出通过两个find命令传递,以删除“ dir / -n”产生的后两行”(管道符号“ |”必须通过“ ^” 进行“ 转义 ”。由于子字符串提取发生在批处理文件中的for循环中,因此需要“ setlocal EnableDelayedExpansion”,并且必须将“!”与变量x而不是“%”。对于上面的示例,执行批处理文件后,您将看到以下输出:
C:\Users\User>testing456
Contacts
Desktop
DOCUME~1
DOWNLO~1
FAVORI~1
GOOGLE~1
Links
Music
Pictures
SAVEDG~1
Searches
TESTIN~1 TXT
TESTIN~2 BAT
TESTIN~1 BAT
UNIGIN~1
Videos
abc.txt
查看其作用。然后,为此创建一个名为的文件abc.docx
。
在玩了一个小时之后,我想到了以下内容:
从DOS提示符:
for /F "tokens=*" %A in ('dir /B/A:-/S c:\Windows') do (@echo %~sA>> "%temp%\file_list_8dot3.txt")
来自.BAT或.CMD文件:
for /F "tokens=*" %%A in ('dir /B/A:-/S c:\Windows') do (@echo %%~sA>> "%temp%\file_list_8dot3.txt")
注意: 此脚本在长文件名方面仍然存在问题,但是它将继续并生成一个8dot3文本文件,然后可以将该文本文件泵入任何其他批处理文件中。
以下是我的整个测试.Bat文件:
@echo off
cls
set ll=%temp%\file_list_8dot3.txt
if exist "%ll%" del "%ll%"
for /F "tokens=*" %%A in ('dir /B/A:-/S %temp%') do (@echo %%~sA>> "%ll%")
start /wait notepad "%ll%"
if exist "%ll%" del "%ll%"