我制作一个小脚本,但我达到了头脑 我希望批处理文件在所有驱动器中查找example.exe或文件夹名称,然后cd到它并在其中创建一个txt文件?甚至是可能的:P?
cd /d D:
dir example.exe /s /p
lets say its found and the dir is D:/Example.exe
so i want the batch to do this,
if example.exe is found cd to it directory then
REM. >> "D:/logs.txt
可能吗? -
我在&#34之后放了什么;如果存在"使批处理文件自动切换到找到的文件目录
@echo on
cd /d D:
dir example.exe /s /p if exist (whether its in D:/Folder/folder or D:/Folder go to directory)
echo >test.txt
pause
最后解决方案@Stephan最佳工作答案
@echo off
setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('wmic logicaldisk where "size>0" get caption^|find ":"') do (
for /f "delims=" %%A in ('dir /s /b %%a:\example.exe 2^>nul') do (
ECHO break>"%%~dpAtest.txt"
)
)
答案 0 :(得分:0)
更新了答案,因为我在此次更新后收到了您的问题:
为了处理您找到的所有文件:
FOR /F "delims=#" %%f IN ('dir example.exe /s /b ') DO (
echo example.exe was found at path %%~pf
)
现在您可以修改您的ECHO声明:
ECHO some text > C:\logs.txt
如果要附加到文件而不是替换,则必须使用两个括号:
ECHO some text >> C:\logs.txt
您可以在>之后输入路径。您之前不需要CD。
您也可以将该变量用于CD:
cd %%~pf
如果您想要%% f的其他部分,可以在命令行上执行FOR /?
或查看the reference
答案 1 :(得分:0)
要捕获命令的输出,请使用for
dir /p
在这里没有意义(如果输出比屏幕长,则暂停)。您需要/b
(裸格式;与/s
一起使用时仅文件名/驱动器/路径/文件名)。
%%~dpA
仅提供 d :\ p ath \。
break>filename
创建一个空文件(REM.
也可以,但我更喜欢break
)
@echo off
setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('wmic logicaldisk where "size>0" get caption^|find ":"') do (
for /f "delims=" %%A in ('dir /s /b %%a:\example.exe 2^>nul') do (
ECHO break>"%%~dpAtest.txt"
)
)
这会将空test.txt
放入每个可用驱动器中存在example.exe
的每个文件夹中。如果已经存在test.txt
,则会被空文件覆盖。
注意:这只会将break命令回显到屏幕上(出于安全原因)。如果输出符合您的要求,请删除ECHO
。