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

is there any way to save file in two different folder on some condition via batch script

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

如果 DayName = 星期一或星期二则设置 FileName=C:\backupdb\kgote_%%k_%%j_%%i 否则如果 DayName = Wednesday 或 Thrusday 然后设置 FileName=C:\backupdb1\kgote_%%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:\backupdb\kgote_%%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%\System32\wbem\WMIC.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:\ull\PathTo\exp.exe" kgote/kgote@ltcdb file=%_FileName%.dmp log=%_FileName%.log full=y

如果日期名称不是 MondayTuesdayWednesdayThursday.

,此脚本将直接关闭而不执行任何操作

您可能需要修改的部分仅限于 C:\Folder27 (即周三和周四备份路径的位置)C:\Folder18(即周一和周二备份路径的位置)F:\ull\PathTo14, (exp.exe 命令行实用程序的位置).

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

=== 调用-KendugurBackup.bat

"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" ^
    -NoLogo -NoProfile -File "%USERPROFILE%\bin\Invoke-KendugurBackup.ps1"

=== 调用-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 = "$BaseDir\kgote_$(Get-Date -Format 'dd_MM_yyyy')"
    Write-Verbose "FileBaseName is $FileBaseName"
    & "exp" kgote/kgote@ltcdb file=$FileBaseName.dmp log=$FileBaseName.log full=y
}