我一直在尝试创建一个检查文件名的脚本,如果是肯定的,然后将其重命名并将其移动到服务器中的文件夹,然后检查下一个参数并执行相同的操作。
完整的想法是,我有一个生成CSV文件的系统,文件的名称是根据区域生成的,如果我在护理中,它会生成一个带有“护理”字样的文件,所以这将帮助我编写脚本以识别使用脚本放置此文件的位置。它将不得不阅读3个参数,但我刚才提到了2个。
文件名:testing.bat(我正在创建一个循环)
到目前为止,这是我的代码。
if exist "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\*Nursing*.csv" (
ren "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\*Nursing*.csv" names.csv
move /y "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\names.csv" \\10.10.10.10\scenarios\Nursing
)
else if exist "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\*Midwifery*.csv" (
ren "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\*Midwifery*.csv" names.csv
move /y "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\names.csv" \\10.10.10.10\scenarios\Midwifery
)
else (
echo. Not files detected!
)
timeout /t 1
testing.bat
欢迎任何帮助。
答案 0 :(得分:1)
您遇到语法问题:else
子句的位置。它必须放在(使用时)与if
命令的右括号相同的行中。如果将它放在下一行,解析器将把它作为另一个命令,而不是前一个if
if exist .... (
....
) else if exist .... (
....
) else (
....
)
此外,虽然不是问题,但更容易将您使用的路径放在变量中并使用变量而不是文字
set "sourceFolder=E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV"
set "targetFolder=\\10.10.10.10\scenarios"
if exist "%sourceFolder%\*Nursing*.csv" (
ren "%sourceFolder%\*Nursing*.csv" names.csv
move /y "%sourceFolder%\names.csv" "%targetFolder%\Nursing"
) else if exist ""%sourceFolder%\*Midwifery*.csv" (
ren "%sourceFolder%\*Midwifery*.csv" names.csv
move /y "%sourceFolder%\names.csv" "%targetFolder%\Midwifery"
) else (
echo. Not files detected!
)
一旦我们使用变量来存储固定数据,我们就可以开始使用变量来保存不断变化的数据。由于正在执行的代码始终相同,请在执行的代码中标识更改的部分,并使用for
命令迭代文件夹中不断变化的信息和文件
@echo off
setlocal enableextensions disabledelayedexpansion
set "sourceFolder=E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV"
set "targetFolder=\\10.10.10.10\scenarios"
for /l %%z in (0) do (
setlocal enabledelayedexpansion
echo(!time! - Searching files ....
endlocal
set "found="
for %%a in ( Nursing Midwifery XXXX YYYY ) do (
for %%b in ("%sourceFolder%\*%%~a*.csv") do (
move /y "%%~fb" "%targetFolder%\%%~a\names.csv"
set "found=1"
)
)
if not defined found echo(.... No file detected !
timeout /t 1
echo(
)
for /l %%z
定义了一个无限循环(只是为了避免批处理文件中的自调用或标签的goto
命令)
for %%a
将迭代“参数”列表。对于列表中的每个元素,可替换参数%%a
将保留其值并将其公开给do
子句中的代码,其中%%~a
(可替换参数中的值,如果没有引号,则为present)用于搜索文件并确定目标文件夹。
for %%b
将搜索文件。在这种情况下,可替换参数%%b
将保存对找到的文件的引用。此引用稍后用于move
文件(%%~fb
是%%b
引用的文件的完整路径)
答案 1 :(得分:0)
也许是这样的。您可以通过列出要根据服务器目录检查的文件名来扩展它。因此,脚本将循环访问与目标列表匹配的文件。
@echo off
SETLOCAL
if not exist \\deviceName\e$\directory\filename.csv (
echo filename.csv not found!
) else (
ren \\deviceName\e$\directory\filename.csv filename2.csv
move /-Y \\deviceName\e$\directory\filename2.csv \\deviceName2\e$\director\filename2.csv
if not exist \\device\e$\diretory\filename3.csv (
echo filename3.csv not found!
) else (
ren \\deviceName\e$\directory\filename3.csv filename4.csv
move /-Y \\deviceName\e$\directory\filename4.csv \\!deviceName2\e$\director\filename4.csv
)
)
ENDLOCAL
EXIT
答案 2 :(得分:0)
这是一个powershell脚本,可以干净地处理任意数量的部门,并且仍然易于维护。
$DepartmentList = "Nursing","Midwifery","Ortho","Pedi"
$SourceFolder = "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV"
$DestFolder = "\\10.10.10.10\scenarios\"
ForEach($Dept in $DepartmentList)
{
if(Test-Path "E:\inetpub\wwwroot\sim_blitzv15_MSSQL\CSV\*$Dept*.csv")
{
Move-Item "$SourceFolder\*$Dept*.csv" -Destination "$DestFolder\$Dept\names.csv" -Force
$FileFound = $true
}
}
If(-not ($FileFound))
{
Write-Warning "Not files detected!"
}
如果您还没有使用PowerShell,那么这是一个很好的启动项目,可以使用./ / p>