Kac*_*per 23 windows batch-file
我需要编写一个在Windows中工作的脚本,执行时会在某些子目录中运行命令,但遗憾的是我从未做过任何批处理,我不知道从哪里开始.
使用文件夹的示例结构:
\root
\one
\two
\three
\four
Run Code Online (Sandbox Code Playgroud)
我希望脚本输入指定的文件夹(例如只有'one'和'four'),然后在该文件夹的每个子目录中运行一些命令.
如果您可以提供任何帮助,可能是一些基本教程或仅仅是我需要的命令的名称,我将非常感激.
Mar*_*ged 45
您可以告诉批处理迭代目录:
for /d %i in (C:\temp\*) do ( cd "%i" & *enter your command here* )
Run Code Online (Sandbox Code Playgroud)
直接在命令行上运行时使用百分号,从批处理运行时使用两个百分号
在批处理中,这看起来像这样:
@echo off
set back=%cd%
for /d %%i in (C:\temp\*) do (
cd "%%i"
echo current directory:
cd
pause
)
cd %back%
Run Code Online (Sandbox Code Playgroud)
将所需的命令放在(和之间的行中).如果替换C:\temp\为%1您可以告诉批处理在调用时从第一个参数中获取目录的值.根据目录的数量,您可以为每个目录调用批处理,也可以从列表中读取它们:
for /f %i in (paths.lst) do call yourbatch %i
Run Code Online (Sandbox Code Playgroud)
该paths.lst会是这样的:
C:\
D:\
Y:\
C:\foo
Run Code Online (Sandbox Code Playgroud)
所有这些都是从内存中写的,所以你可能需要添加一些引号;-)请注意,这只会处理第一级目录,这意味着没有所选子文件夹的子文件夹.
你应该看看这个。您要查找的命令是FOR /R。看起来像这样:
FOR /R "C:\SomePath\" %%F IN (.) DO (
some command
)
Run Code Online (Sandbox Code Playgroud)
我喜欢Marged那个被定义为最佳答案的答案(我投票赞成),但是这个答案有很大的不便。
当 ( 和 ) 之间的 DOS 命令包含一些错误时, DOS 返回的错误信息不是很明确。
有关信息,此消息是
) was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,我提出以下解决方案:
@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
Run Code Online (Sandbox Code Playgroud)
FOR 循环调用 $DoSomething “方法”为找到的每个目录传递 DIR-NAME 都有一个参数。注意:在 $DoSomething 方法中将双引号传递给 %1 参数。
exit /B 命令用于指示方法的结束而不是脚本的结束。
在我的 PC 上,我在 c:\Temp 文件夹中有 2 个文件夹的结果是
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 . . .
Run Code Online (Sandbox Code Playgroud)
注意:在Margeds 答案中,当文件夹是相对的(带有 . 或 .. 的文件夹)时,cd "%%i" 的使用是不正确的。
为什么,因为脚本转到第一个文件夹,当它在第一个文件夹中时,它请求从第一个文件夹转到第二个文件夹!
| 归档时间: |
|
| 查看次数: |
36748 次 |
| 最近记录: |