您如何搜索目录并采取措施?

时间:2019-06-21 19:55:24

标签: batch-file cmd

我正在寻找一个批处理文件,它将在充满计算机备份的目录中进行筛选。文件格式为“计算机名-日期”。由于我知道计算机名称是静态的,因此我需要查找并占据该目录,以便可以恢复其内容。

我从未意识到for循环与我在其他语言中所玩的东西太陌生了,所以我发现自己很快就无处可去。

REM First mount the drive that contains the backed up files
net use P: \\DC1\Shared\1Backups 

REM Get the computer's name so we know what PC backup to use.
set SaveDirectory=%computername%

REM For each folder in the directory, do this when the computer name is found. 
FOR /R "P:\" %%G in (%SaveDirectory%*) DO (
    REM Restore files
    echo found it.
    REM Copy subdirectories into User Folder
    mkdir P:\UGH
)

REM Dismount drive

我现在遇到的问题是,当我运行代码时,DO永远不会运行。它应该通过搜索“ INTERN *”来找到一个名为“ INTERN-6.21.2019”的文件夹

我对for语句的印象可能是错误的。我需要它来搜索P:/目录,而不是子文件夹。将文件夹名称与SavedDirectory进行比较,然后在它们匹配时执行一些操作。我在做什么错了?

3 个答案:

答案 0 :(得分:0)

这可能会让您前进。这将找到“最新”目录。从这个问题还不清楚要复制什么以及将复制到何处。

ie.document.querySelector("#tblMain tr:nth-of-type(1) td:nth-of-type(3)").innerText

答案 1 :(得分:0)

通常情况下,使用CALL语句调用子例程而不是在()中运行项目,通常会取得良好的结果。

这里的窍门是您需要将参数传递给子例程。通常,您会在FOR语句中传递您使用的变量。使用%1(或%1%2%3,如果您要传递多个内容)来引用它们,因为它们的行为类似于命令行参数。要退出子例程,您然后跳到EOF,然后EOF将控制返回到FOR循环。在FOR循环之后,请不要忘记跳过子例程,否则您将再次执行它。在下面的示例中,我跳到:end,但是您当然可以跳到其他地方来做更多的事情。

因此,使用这种方法,您的代码可能像这样:

set SaveDirectory=%computername%

FOR /R "P:\" %%G in (%SaveDirectory%*) DO CALL :process %%G
Goto :end

:process
REM Processing goes here
goto :end

:end

希望这会有所帮助

答案 2 :(得分:0)

此答案基于我对您要执行的操作的理解,将以计算机名和日期字符串(带有今天的日期)命名的网络目录复制到另一个位置

@PushD "\\DC1\Shared\1Backups" || GoTo :EOF 
@For /F "EOL=DTokens=1-3" %%A In (
    'WMIC Path Win32_LocalTime Get Day^,Month^,Year'
)Do @For /F Tokens^=* %%D In ("%%C"
)Do @XCopy "%COMPUTERNAME%-%%B.%%A.%%D" "P:\UGH\" /H /R /K /Y>NUL 2>&1
@PopD