【问题标题】:Batch File - Get filename from directory and save as variable批处理文件 - 从目录中获取文件名并保存为变量
【发布时间】:2017-06-15 12:15:04
【问题描述】:

我正在尝试读取一个目录并从该目录中获取文件名。 然后,我想将文件名保存为变量并回显该文件名。

这是我正在使用的代码:

 for /F %%a in ('dir C:\Users\username\Documents\Training\Pentaho\Outputs\BatchFileOutput\ *.csv') do set FileName=%%a
 echo %FileName%

当命令提示符运行时,我得到以下信息: “文件未找到 目录”

有谁知道如何解决这个问题或我哪里出错了?

谢谢

【问题讨论】:

  • 我认为你的代码中唯一的问题是*.csv前面的空格...

标签: batch-file


【解决方案1】:

更安全的方法:

@echo off
setlocal
set "yourDir=C:\Users\username\Documents\Training\Pentaho\Outputs\BatchFileOutput\"
set "yourExt=*.csv"
pushd %yourDir%
for %%a in (*.%yourExt%) do echo %%a
popd
endlocal

同时设置:您的目录和您正在搜索的扩展名,将目录更改为先前设置的目录,可能包括/drive 更改,然后在与您的扩展名匹配的所有文件上运行循环并将它们回显。要只保存最后一个,您可以使用:

...do set fileName=%%a
echo %FileName%

或者在你可以使用的循环中使用它们:

@echo off
Setlocal EnableDelayedExpansion
REM Other things done here

do (
REM Do stuff with %%a here
Set filename=%%a
echo !filename!
echo !filename:~0,6!
echo !filename:a=b!
)

如果你只是想回应他们,你可以去echo %%a。如果您想做其他事情,如 cmets 中描述的字符串替换或子字符串,您需要如上所示的 DelayedExpansion。也有很多关于 SO 的问题。

请注意,您可以获得文件路径的不同“部分”。看看this answer 我也经常看看。或者查看 for 命令的文档,在命令行中键入 for /?

【讨论】:

  • 谢谢,这行得通! :) 我不能只使用以下内容来获取文件名的一部分(但这似乎不起作用?) SET result=%%a:~0,6% ECHO %result%
  • 不。原因是这些 for 循环参数变量不被认为以这种方式使用。您可以将其保存为变量,然后使用 DelayedExpansion (for /f 或以上显示的方式来获取文件名通常是更安全的方式。
  • 我找到了一种使用以下代码的方法: for %%a in (*.%yourExt%) do set filename=%%a echo %filename% 但是它只会回显当目录中有三个文件名时只有一个文件名(我是新手)
  • 我可能更倾向于使用setlocalpushdpopdendlocal 而不仅仅是setcd,只是为了确保我没有做任何可能对环境造成灾难性的事情。
  • ....这是在for-stuff之后写的...我懒得打字了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 2015-03-23
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多