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

时间:2011-01-11 23:40:17

标签: windows batch-file cmd

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

@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

我想输出的是:

running loop test
C:\Users\Family\Desktop\Example\doc 1.txt
C:\Users\Family\Desktop\Example\doc 2.txt
Done

但我明白了:

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

1 个答案:

答案 0 :(得分: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

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

修改
%%~dpnX用于将%%X的文件名扩展为
d =驱动器(C :)
p =路径(\ Users \用户家庭\桌面\实施例)
n = filename(test1)(不带扩展名)

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

此处解释了可能的修饰符 FOR /?