【问题标题】:Check for new folder after running bat commands运行 bat 命令后检查新文件夹
【发布时间】:2015-03-30 12:07:34
【问题描述】:

有没有办法检查在 bat 文件中运行以前的命令是否已在特定父文件夹中创建了新文件夹(确切名称未知)?如果是 - 再运行一个命令,并将新文件夹的完整路径作为该命令的参数。

现在,如果创建了新文件夹,我正在使用文件夹监控软件来运行另一个 bat。我希望只有一个脚本来执行这两项任务。

感谢您的帮助。

【问题讨论】:

  • 我不认为cmd可以监控文件系统你可以使用powershell filesystemonitor
  • 我真的不需要真正的监控,只需检查 bat 文件末尾的新文件夹即可。也许,当bat文件运行时,可以使用文件夹名称创建一个txt文件,如果下次运行时txt中不存在一个文件夹,它的路径可以用作参数吗?我确信这可以用 cmd bat 来完成,我只是不知道它的语法。
  • System.IO.FileSystemWatcher 在您的 powershell 会话有效之前一直存在,但是您必须每次运行 bat 文件才能进行更改,您可以通过 bat 文件进行更改,只需 dir /ad >list.txt 然后使用新目录获取带有循环检查的列表/ad 如果新目录中的另一个不存在列表,您可以通过 echo 创建或删除新文件来通知但不比 powershell 监视器更好

标签: batch-file directory


【解决方案1】:

更改第二行的root_folder 位置 @echo 关闭 设置“root_folder=C:\something”

 setlocal enableDelayedExpansion
 set counter=1
 for /d /r  "%root_folder%" %%a in (*) do (
    set "dirs[!counter!]=%%~sa" >nul
    set /a counter=counter+1
 )

 rem ############################
 rem #  call your code here !!! #
 rem ############################
 call commands.bat

 rem for /l %%l in (1,1,!counter!) do (
 rem    dir /x /b /s /a:d "%root_folder%" | findstr /i "dirs[%%l]" 
 rem )

 set flag=0
 for /d /r  "%root_folder%" %%a in (*) do (
   set dirs[|find  /i "%%~sa" >nul 2>nul ||(
      echo "%%~sa" is a new folder
      set flag=1
   )
 )

 if %flag% equ 0 (
    echo no new folders
 )

【讨论】:

  • 谢谢大家。 Npocmaka 的解决方案效果很好。 Powershell 也在工作,但它对我的需求来说有点过头了。将决定使用什么。再次感谢!
  • 我做了一些测试。如果新文件夹包含空格,则此脚本似乎会返回一个短名称。因此,如果文件夹名称为 NEWDIR NEW,则 echo "%%~sa" 返回 "C:\Temp\NEWDIR~1" 是一个新文件夹。如果 %flag% 为 1,我将需要一个文件夹名称以进行进一步处理。
  • @astep - 使用全名将 %%~sa 更改为 %%~a 。它应该继续工作,只是我认为短片对脚本更安全。
  • @astep 如果在flag 设置为1 的行之后有一个新文件夹,该文件夹作为参数,您可以调用另一个文件或子例程
  • 它现在正在工作。谢谢你。但是,当新文件夹有空格时,会出现“环境变量目录[未定义”错误,但脚本继续工作。
猜你喜欢
  • 2017-04-23
  • 2018-08-25
  • 2019-01-20
  • 2015-10-13
  • 2015-12-23
  • 2011-06-24
  • 1970-01-01
  • 2012-11-28
  • 2012-09-21
相关资源
最近更新 更多