批量变量循环查询

时间:2016-02-09 15:27:07

标签: windows loops variables batch-file

我尝试创建批处理以首先获取目录中的所有文件夹名称并将其输出到txt文件。

dir "C:\directory1\directory2\directory1\work" > C:\output.txt /b /o

然后,运行程序特定的备份功能,该功能需要文件夹名称以匹配上述输出。我可以通过循环发送它,但我需要将名称用作变量。例如:有一个文件夹名称" Test_Test1"另一个名为" Test2_Test3"我使用上面的输出备份。然后,我需要运行一个批处理命令,如果针对单行运行它,看起来就像下面的语句

staging-backup Test_Test1 C:\BackupLocation\Test_Test1

我希望通过抓取所有文件夹名称,将它们放入文件(如果需要)然后在所有行上运行上述命令,但更新名称(参考位置)和备份位置中的Test_Test1来自动执行此过程文件夹(将被创建)。

我已经使用DelayedExpansion来创建变量,但是由于无法抓住这些变量并通过另一个循环输入它们以运行批处理的暂存备份部分,因此我无法解决这个问题。

以下是我的DelayedExpansion设置供参考     @echo关闭     set" file = C:\ output.txt"

setlocal EnableDelayedExpansion
<"!file!" (
  for /f %%i in ('type "!file!" ^| find /c /v ""') do set /a n=%%i && for /l     %%j in (1 1 %%i) do (
    set /p "line_%%j="
  )
)

echo Number of lines: !n! 
echo.
echo !n! > c:\lines.txt
echo Line contents:
for /l %%i in (1 1 !n!) do echo(!line_%%i!
echo.

pause

关于如何最好地解决这个问题的任何想法?如果可能的话,我将这些组合成1批,因此我需要在工作完成时暂时保留变量。我想我正在努力弄清楚如何在我使用的staging-backup命令的变量中调用这些变量。

2 个答案:

答案 0 :(得分:0)

一个想法:

@Echo off&cls
setlocal enabledelayedexpansion
set /a $count=1
for /f "delims=" %%a in ('dir "C:\directory1\directory2\directory1\work" /b/o') do (
  md "C:\BackupLocation\%%a-!$Count!" 2>nul
  staging-backup "%%a-!$Count!" "C:\BackupLocation\%%a-!$Count!"
  set /a $Count+=1
)

答案 1 :(得分:0)

感谢您的信息!我做了所谓的编辑 - !$ Count!正在添加-1,-2等文件夹,我决定反对,因为文件夹是唯一的名称。我还发现我需要更改格式,并在下面结束:

md "C:\BackupLocation\
setlocal enabledelayedexpansion
set /a $count=1
cd /d C:\staging-backup\location
for /f "delims=" %%a in ('dir "C:\directory1\directory2\directory1\work"     /b/o') do (
staging-backup "%%a" "C:\BackupLocation\%%a"
cd /d C:\staging-backup\location
set /a $Count+=1
)

我已经做了一些额外的更改,因为我要添加一些日志记录,但这是我的主要障碍。谢谢你的帮助!