@echo off
pushd .
for /d %%i in (.\WorkingTime\*.txt) do call :$DoSomething "%%i"
popd
pause
exit /B
::**************************************************
:$DoSomething
::**************************************************
echo current directory: %1
cd %1
echo current directory: %cd%
cd ..
exit /B
D:\@Atos\Prestations>call test.bat
current directory: ".\New folder"
current directory: D:\@Atos\Prestations\New folder
current directory: ".\WorkingTime"
current directory: D:\@Atos\Prestations\WorkingTime
Press any key to continue . . .
5条答案
按热度按时间v6ylcynt1#
您可以告诉批处理迭代目录:
直接在命令行上运行时使用百分号,从批处理运行时使用两个百分号
在一个批处理中,它看起来像这样:
将所需的命令放在
(
和)
之间的行中。如果将C:\temp\
替换为%1
,则可以告诉批处理在调用它时从第一个参数中获取目录的值。根据目录的数量,您可以为每个目录调用批处理,也可以从列表中读取它们:paths.lst
看起来像这样:所有这些都是凭记忆写出来的,所以你可能需要加上一些引号;- )请注意,这将只处理第一级目录,这意味着没有选定子文件夹的子文件夹。
lzfw57am2#
你应该看看this。您要查找的命令是
FOR /R
。看起来像这样:nr7wwzry3#
我喜欢被定义为最佳答案的
Marged
的答案(我投了赞成票),但这个答案有很大的不便。当DOS命令在(和)之间包含一些错误时,DOS返回的错误信息不是很明确。
作为参考,此消息是
为了避免这种情况,我提出以下解决方案:
FOR循环调用$DoSomething“方法”为每个目录找到传递DIR-NAME有一个参数。注意:双引号传递给$DoSomething方法中的%1参数。
exit /B命令用于指示方法的END,而不是脚本的END。
在我的PC上,我在c:\Temp文件夹中有2个文件夹,结果是
警告:在
Marged
的答案中,当文件夹是相对文件夹(文件夹为。或..)。为什么,因为脚本后藤第一个文件夹,当它在第一个文件夹中时,它请求从第一个文件夹转到第二个文件夹!
4dbbbstv4#
在Windows 10和更高版本上,应该是这样的:
这将显示“C:\MyFolderToLookIn”中每个文件夹的名称。双引号是必需的。如果要显示文件夹的完整路径,请将echo %%~nxG更改为echo %%G
nlejzf6q5#
在BASH中,这是一种Unix shell,也可以下载用于Windows,我肯定会使用find来实现这一点
您可以根据自己的需要随意修改。