windows - 在批处理脚本中循环遍历文件名

标签 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

最佳答案

主要问题似乎是 (%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=path(\Users\Family\Desktop\Example)
n=文件名(test1) (没有扩展名)

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

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

关于windows - 在批处理脚本中循环遍历文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663928/

相关文章:

Windows Azure Toolkit for Java 插件无法在 Mac 上运行

windows - 如何编写跨平台安装程序脚本?

windows - 如何解析批处理文件中的命令输出

batch-file - 为什么在用于从我的批处理脚本中读取所有行时找不到指定的文件?

windows - SETX 不会将路径附加到系统路径变量

windows - 如何在 Windows 上应用差异补丁?

java - 如何在java中检索环境变量(Jenkins)

windows - 如何创建自定义百分比 (%) 快捷方式,如 %appdata%?

loops - 赢得命令: batch string replacement deletes "!"

vb.net - 静默运行 CMD