Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 需要帮助修改脚本以使用单个文件,而不是一次使用所有文件吗_Windows_Batch File - Fatal编程技术网

Windows 需要帮助修改脚本以使用单个文件,而不是一次使用所有文件吗

Windows 需要帮助修改脚本以使用单个文件,而不是一次使用所有文件吗,windows,batch-file,Windows,Batch File,我想知道是否有人能帮我对我继承的这个脚本进行一次非常简单的修改。我以前没有批处理文件的经验,需要以非常简单的方式修改这个已经在工作的脚本 当前,此脚本执行以下操作: -监视文件夹并查看其中是否有文件 -如果有,它将通过命令行执行FTP传输 -然后,它将文件移动到一个归档文件夹中,该文件夹使用当前时间戳创建并命名,并将一些内容写入文本日志文件 -如果没有文件,脚本将退出并不执行任何操作 到目前为止,脚本正在同时查找、处理和移动所有文件。我想看看我是否可以在如何修改脚本的帮助下被指向正确的方向,这样

我想知道是否有人能帮我对我继承的这个脚本进行一次非常简单的修改。我以前没有批处理文件的经验,需要以非常简单的方式修改这个已经在工作的脚本

当前,此脚本执行以下操作: -监视文件夹并查看其中是否有文件 -如果有,它将通过命令行执行FTP传输 -然后,它将文件移动到一个归档文件夹中,该文件夹使用当前时间戳创建并命名,并将一些内容写入文本日志文件 -如果没有文件,脚本将退出并不执行任何操作

到目前为止,脚本正在同时查找、处理和移动所有文件。我想看看我是否可以在如何修改脚本的帮助下被指向正确的方向,这样它就可以一个接一个地处理每个文件,而不是使用。到处都是。最后,我认为我需要做的就是找出如何正确地执行循环,并读取/存储文件名以用作变量,而不是使用。任何帮助都将不胜感激

@ECHO OFF

:: Set count of files = 0
SET X=0

:: Set timestamp for processed folders
set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.%TIME:~9,2%

:: If more than 0 files exist begin ftp and file archival otherwise exit
FOR %%i IN (c:\Encoded_HL7_Vanderbilt\*.*) DO IF EXIST %%i (SET X=1) 
IF [%X%] gtr [0]  (cd\..\..

cd\"Program Files (x86)\Ipswitch\WS_FTP 12"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error switching to ftp program directory>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)

wsftppro -s local:C:\Encoded_HL7_Vanderbilt\*.* -d Vandy!Vanderbilt:/incoming/ 
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error transmitting file to ftp server>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)

md "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error creating archive directory>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)


move "C:\Encoded_HL7_Vanderbilt\*.*" "E:\Processed_HL7_Vanderbilt%1\%TIMESTAMP%"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error moving files to archive directory>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt
exit)) ELSE (exit)

echo %TIMESTAMP% File transfer completed successfully>E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.success.txt
exit

试试这个,它可能对你有用:

@ECHO OFF &SETLOCAL

:: Set count of files = 0
SET /a count=0

:: Set timestamp for processed folders
set "TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.%TIME:~9,2%"

cd "%ProgramFiles(x86)%\Ipswitch\WS_FTP 12"  || (
    echo %TIMESTAMP% Error switching to ftp program directory>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
    exit /b 1
)
md "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%" || (
    echo %TIMESTAMP% Error creating archive directory>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
    exit /b 1
)

:: If more than 0 files exist begin ftp and file archival otherwise exit
FOR %%i IN (c:\Encoded_HL7_Vanderbilt\*) DO (
    set /a count+=1

    REM I don't know the wsftppro command line parameters, pls. check the man page
    wsftppro -s local:"%%~i" -d Vandy!Vanderbilt:/incoming/ || (
        echo %TIMESTAMP% Error transmitting file to ftp server>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
        exit /b 1
    )
    move "%%~i" "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%" || (
        echo %TIMESTAMP% Error moving files to archive directory>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.error.txt"
        exit /b 1
    )
) 

if %count% equ 0 (
    rd "E:\Processed_HL7_Vanderbilt\%1\%TIMESTAMP%" 2>nul
    exit /b 1
)

echo %TIMESTAMP% File transfer completed successfully>"E:\HL7_Vanderbilt_log\%1\%TIMESTAMP%.success.txt"

在公园里走走:如果任何文件产生错误,它将停止进一步处理文件

@ECHO OFF

set "folder=%~1"

:: Set timestamp for processed folders
set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.%TIME:~9,2%

:: If more than 0 files exist begin ftp and file archival otherwise exit
FOR %%a IN (c:\Encoded_HL7_Vanderbilt\*.*) DO (

cd\"Program Files (x86)\Ipswitch\WS_FTP 12"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error switching to ftp program directory>E:\HL7_Vanderbilt_log\%folder%\%TIMESTAMP%.error.txt
goto :done)

wsftppro -s local:%%a -d Vandy!Vanderbilt:/incoming/ 
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error transmitting "%%a" file to ftp server>E:\HL7_Vanderbilt_log\%folder%\%TIMESTAMP%.error.txt
goto :done)

md "E:\Processed_HL7_Vanderbilt\%folder%\%TIMESTAMP%" 2>nul
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error creating archive directory>E:\HL7_Vanderbilt_log\%folder%\%TIMESTAMP%.error.txt
goto :done)


move "%%a" "E:\Processed_HL7_Vanderbilt\%folder%\%TIMESTAMP%"
IF ERRORLEVEL 1 (echo %TIMESTAMP% Error moving "%%a" file to archive directory>E:\HL7_Vanderbilt_log\%folder%\%TIMESTAMP%.error.txt
goto :done)

)

echo %TIMESTAMP% File transfers completed successfully or no files were found>E:\HL7_Vanderbilt_log\%folder%\%TIMESTAMP%.success.txt
exit

:done 
goto :EOF

谢谢,这看起来很有希望。不过有一件事。我对它进行了几次测试,它成功地读入第一个文件,传输它,创建带有时间戳的归档文件夹,然后移动它。当它到达第二个文件时,它会读取、传输它,但在创建归档文件夹时会出错。是否有可能它正在尝试为第二个文件创建存档文件夹,但技术上它与第一个文件具有相同的时间戳,并且无法创建它?再次感谢,它看起来可以工作。我将创建归档文件夹的行移动到循环之外。这样,它将创建一个时间戳和一个以时间戳为名称的arvhive文件夹,然后处理所有文件并将其移动到此文件夹。
wsftppro-s local:“%a”