我正在寻找一个批处理文件,它将在充满计算机备份的目录中进行筛选。文件格式为“计算机名-日期”。由于我知道计算机名称是静态的,因此我需要查找并占据该目录,以便可以恢复其内容。
我从未意识到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进行比较,然后在它们匹配时执行一些操作。我在做什么错了?
答案 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