如何在批处理cmd中的dir(文件/ s / p)之后自动更改目录?

时间:2016-06-24 00:56:44

标签: batch-file cmd command-prompt

我制作一个小脚本,但我达到了头脑 我希望批处理文件在所有驱动器中查找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"
  )
)

2 个答案:

答案 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