循环访问批处理脚本中的文件名

Kra*_*ons 3 windows cmd batch-file

我想要一个文件夹中的所有文本文档的批处理脚本.这是我到目前为止所管理的:

@ECHO off
title Test
set dir1=C:\Users\Family\Desktop\Example

:Start
cls
echo 1. test loop
echo 2. Quit
set /p choice=I choose (1,2):
if %choice%==1 goto test
if %choice%==2 exit

:test
cls
echo running loop test 
FOR %%n in (%dir1% *.txt) DO echo %dir1%\%%n
echo Done
pause
Run Code Online (Sandbox Code Playgroud)

我想输出的是:

running loop test
C:\Users\Family\Desktop\Example\doc 1.txt
C:\Users\Family\Desktop\Example\doc 2.txt
Done
Run Code Online (Sandbox Code Playgroud)

但我明白了:

running loop test
C:\Users\Family\Desktop\Example\C:\Users\Family\Desktop\Example
C:\Users\Family\Desktop\Example\doc 1.txt
C:\Users\Family\Desktop\Example\doc 2.txt
Done
Run Code Online (Sandbox Code Playgroud)

jeb*_*jeb 11

主要问题似乎是(%dir1%*.txt)之间的空间

它可能是

@ECHO off
title Test
set "dir1=C:\Users\Family\Desktop\Example"

:Start
cls
echo 1. test loop
echo 2. Quit
set /p choice=I choose (1,2):
if %choice%==1 goto test
if %choice%==2 exit

:test
cls
echo running loop test 
FOR %%X in ("%dir1%\*.txt") DO echo %%~dpnX
echo Done
pause
Run Code Online (Sandbox Code Playgroud)

引号用于避免路径中的空格或其他特殊字符出现问题.

编辑:
%%~dpnX是用于扩展的文件名%%X
d=驱动器(C :)
p=路径(\ Users \用户家庭\桌面\实施例)
n=文件名(TEST1)(不扩展)

f=完整文件名(C:\ Users\Family\Desktop\Example\test1.txt).

这里解释了可能的修饰符FOR /?

  • `%% ~nX`只是文件名(test1),带扩展名的文件名 - `%% ~nxX`(test1.txt). (3认同)