是否有办法在某些情况下通过批处理脚本将文件保存在两个不同的文件夹中



对不起,我是批处理脚本的新手,只是想根据某些条件将dmp文件保存在特定文件夹中

如果DayName =星期一或星期二,则设置FileName=C:backupdbkgote_%%k_%%j_%%i如果DayName =星期三或星期四,则设置FileName=C:backupdb1kgote_%%k_%%j_%%i

echo Taking backup of Kenduguri Database
for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (
set DayOfWeek=%%i
set Month=%%j
set Day=%%k
set Year=%%l
REM set Date=%%i %%k %%j %%l
set FileName=C:backupdbkgote_%%k_%%j_%%i
)
exp kgote/kgote@ltcdb file=%FileName%.dmp log=%FileName%.log  full=y

这是一个例子,根据你在发布时的问题中的信息,你需要自己修改才能使用它,因为你没有确认正确的文件路径。

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F Delims^=^= %%G In ('"(Set _) 2> NUL"') Do Set "%%G="
For /F %%G In ('%SystemRoot%System32wbemWMIC.exe Path Win32_LocalTime Where^
"DayOfWeek > 0 And DayOfWeek < 5" Get Day^, DayOfWeek^, Month /Value 2^>NUL'
) Do Set "_%%G" 2>NUL
If Not Defined _DayOfWeek (GoTo :EOF) Else Set "_FolderPath=C:Folder2"
If %_DayOfWeek% Lss 3 Set "_FolderPath=C:Folder1"
For /F Tokens^=%_DayOfWeek% %%G In ("Monday Tuesday Wednesday Thursday"
) Do Set "_DayOfWeek=%%~G"
For %%G In (Day Month) Do (Set /A _%%G += 100 & SetLocal EnableDelayedExpansion
For %%H In ("!_%%G:~-2!") Do EndLocal & Set "_%%G=%%~H")
Set "_FileName=%_FolderPath%pcote_%_Day%_%_Month%_%_DayOfWeek%"
"F:ullPathToexp.exe" kgote/kgote@ltcdb file=%_FileName%.dmp log=%_FileName%.log full=y

如果日期名称不是Monday,Tuesday,WednesdayThursday,该脚本将关闭而不做任何操作。

您可能需要修改的部分仅限于7线上的C:Folder2。周三和周四备份路径的位置)8线上的C:Folder1(即(星期一和星期二备份路径的位置)14行上的F:ullPathTo(exp.exe命令行实用程序的位置).

另一种方法是使用PowerShell。除非您的组织阻止了它,否则PowerShell在所有支持的Windows系统上都可用。

= = = Invoke-KendugurBackup.bat

"%SystemRoot%System32WindowsPowerShellv1.0powershell.exe" ^
-NoLogo -NoProfile -File "%USERPROFILE%binInvoke-KendugurBackup.ps1"

= = = Invoke-KendugurBackup.ps1

[CmdletBinding()]
Param()
$DayOfWeek = [int](Get-Date).DayOfWeek
# Test for Monday through Thursday. Do not backup Sunday, Friday, and Satrday.
if ($DayOfWeek -gt 0 -and $DayOfWeek -lt 5) {
Write-Verbose "DayOfWeek is $DayOfWeek"
$BaseDir = (@(1,2) -contains $DayOfWeek) ? 'C:folder1' : 'C:folder2'
$FileBaseName = "$BaseDirkgote_$(Get-Date -Format 'dd_MM_yyyy')"
Write-Verbose "FileBaseName is $FileBaseName"
& "exp" kgote/kgote@ltcdb file=$FileBaseName.dmp log=$FileBaseName.log full=y
}

最新更新