어제 실현 된 이름으로 디렉토리의 ftp 파일에 배치 파일을 만드는 방법은 무엇입니까? [닫은]


-11

날짜에 이름이 인코딩 된 디렉토리 세트가 있습니다.
해당 디렉토리 안에는이라는 파일이 있습니다 files.csv.

디렉토리의 이름은 예를 들어 다음과 같습니다.

/ opt / oss / server / var / fileint / pm / pmexport_20150915

여기서 마지막 디렉토리의 이름은 날짜와 함께 변경됩니다 (예 : pmexport_201509152015 년 9 월 15 일의 디렉토리).

files.csv전날의 고정 된 목적지로 자동으로 ftp로 배치 파일을 만들고 싶습니다 .
예를 들어 오늘은 2015 년 9 월 16 일입니다 . files.csv어제 디렉토리 에서 ftp 를 사용 하고 싶습니다 pmexport_20150915.


슈퍼 유저에 오신 것을 환영합니다. 우리는 스크립트 작성 서비스가 아닙니다. 사용자는 지금까지 시도한 내용 (사용중인 코드 포함)과 문제가 발생한 위치를 알려 특정 문제를 해결할 수 있도록해야합니다. 코드 만 요구하는 질문은 너무 광범위 하여 보류되거나 종료 될 수 있습니다 . 좋은 질문을하려면 어떻게합니까?를 읽으십시오 . .
DavidPostill

나는 코드가 단지 그것을 완료하는 방법에 대한 몇 가지 포인터와 거의가 예를 지적 썼다하지 않은 귀하의 의견 미안 ... 내가 대답을 떠날거야 훼손 것 같다 @DavidPostill
조 테일러

@JoeTaylor 문제 없습니다. 우리는 사람들이 약간의 노력을 기울
이기를 좋아합니다

@DavidPostill-파일 경로로 Windows가 아닌 시스템을 사용하고있는 것 같습니다. 의심 Powershell은 전혀 도움이 될 것입니다 ....
Joe Taylor

답변:


1

Powershell로 파일을 업로드하는 것에 대한 게시물을 보셨습니까 ?

    ##################################################################################### 
##           Script will Upload files to FTP    
##           Author:  Vikas Sukhija                                                            
##                                                                     
##           Date: 02-24-2013 
##           Modified Date:- 02-26-2013 (included loging & monitoring) 
##################################################################################### 
#############################Define Log Files######################################## 

$date = get-date -format d 
$date = $date.ToString().Replace(“/”, “-”) 
$time = get-date -format t 
$month = get-date  
$month1 = $month.month 
$year1 = $month.year 
$time = $time.ToString().Replace(":", "-") 
$time = $time.ToString().Replace(" ", "") 

$log1 = ".\Logs" + "\" + "FTP_" + $date + "_.log" 
$log2 = ".\Logs" + "\" + "FTP_" + $month1 +"_" + $year1 +"_.log" 
$log3 = ".\Logs" + "\" + "FTP_" + $date + $time + "_.log" 

$logs = ".\Logs" + "\" + "Powershell" + $date + "_" + $time + "_.txt" 

#Start-Transcript -Path $logs  
$dt = Get-Date 
Add-Content $log3 "$dt : Script Started" 

###########################Variables###################################### 

$smtpServer = "smtp.lab.com" # Change  
$fromadd = "DoNotReplyftp@lab.com" # Change  
$email1 = "Vikas.Sukhija@lab.com"  # Change  
$ftp = "ftp://127.0.0.1/" # Change 
$user = "vikas"  # Change 
$pass = "password" # Change 
$uploadfpath = "C:\Uploadftp\ftpfiles" # Define the Folder from where files will be uploaded  

########################################################################### 

$checkitems = Get-ChildItem $uploadfpath 
$countitems = $checkitems.count 
if ($countitems -eq 0) 
{ 
Write-Host "No items to process" -ForegroundColor Green 
$dt = Get-Date 
Add-Content $log3 "$dt : No items to process, script will exit" 
exit 
} 
$dt = Get-Date 
Add-Content $log3 "$dt : Total number of items to process $countitems" 

$processed = ".\processed\$date" + "-" + $time 
if((test-path $processed) -like $false) 
{ 
New-Item -Path "$processed" -type directory 
} 

##################################################################################### 

if ($error -ne $null) 
      { 
#SMTP Relay address 
$msg = new-object Net.Mail.MailMessage 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 

#Mail sender 
$msg.From = $fromadd 
#mail recipient 
$msg.To.Add($email1) 
$msg.Subject = "FTP Script error" 
$msg.Body = $error 
$smtp.Send($msg) 
$dt = Get-Date 
Add-Content $log3 "$dt : Script Terminated because of error: $error" 
$error.clear() 
exit 

       } 
  else 

      { 
    Write-host "no errors till now" 
      } 

$webclient = New-Object System.Net.WebClient  

$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)   

#Upload each file in upload directory... 

foreach($item in (dir $uploadfpath "*.*")){  
    Write-host  "Uploading $item..."  -ForegroundColor Green 
    $dt = Get-Date 
    Add-Content $log3 "$dt : Uploading $item..." 
    $uri = New-Object System.Uri($ftp+$item.Name)  
    $webclient.UploadFile($uri, $item.FullName) 
      if($error -ne $null) 
        { 
    Write-Host "Items will not be moved" -ForegroundColor Red 
        } 
        else 
        { 
    Write-Host "Moving $item to processed" -ForegroundColor green 
    Move-Item "$uploadfpath\$item" $processed 
    $dt = Get-Date 
    Add-Content $log3 "$dt : Moving $item to processed" 
        } 
 }  

if ($error -ne $null) 
      { 
#SMTP Relay address 
$msg = new-object Net.Mail.MailMessage 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 

#Mail sender 
$msg.From = $fromadd 
#mail recipient 
$msg.To.Add($email1) 
$msg.Subject = "FTP Script error" 
$msg.Body = $error 
$smtp.Send($msg) 
$dt = Get-Date 
Add-Content $log3 "$dt : Script encountered error: $error" 
$error.clear() 
       } 
  else 

      { 
    Write-host "no errors till now" 
      } 
$dt = Get-Date 
Add-Content $log3 "$dt : Script Processing finished" 

#Stop-Transcript 
##################################################################

업데이트 할 파일이 들어있는 문자열 만 있으면됩니다. 이 방법으로 Get-Date 함수를 사용하는 경우 :
(Get-Date) .AddDays (-1) .ToString ( 'yyyyMMdd')
그러면 업로드 할 파일이 포함 된 문자열 배열을 만들 수 있습니다. 문자열에 필터를 포함하도록 get-childitem을 수정하여이를 수행 할 수 있어야합니다.
FTP를 사용하여 확인하고 제한된 tome을 사용할 수 없기 때문에 이것을 완전히 컴파일하고 테스트 할 수는 없지만 빠른 조정으로 잘 작동 할 수 있기를 바랍니다.


친애하는, 어제 날짜를 표시하고 표시 할 간단한 배치 파일을 만들도록 지원하십시오.
SAKILANI Mohamed

1

리눅스 머신에서 파일을 가져 오려고한다고 가정하자 . bash 쉘 또는 powershell을 프로그래밍 해야하는 경우 수행해야 할 단계는 동일합니다. 언어 만 다릅니다 ... 언어에는 거의 필요하지 않습니다.

나는 당신에게 완전한 작업 솔루션을 제공하지 않을 것이며 scp, 안전한 사본을 만드는 것을 사용할 것 입니다 (원격 파일 복사 프로그램입니다). 힌트로 사용하고 유용한 명령을 찾으십시오 ( man date도움이 필요합니다 date...).

#!/bin/bash
DestinationPath="/tmp"    # Here you have to put where you want to copy the file
FileToTake='files.csv'    # Here the file you want to take
PathFrom=$(date -d yesterday "+/opt/oss/server/var/fileint/pm/pmexport_%Y%m%d")
FullFileNameToTake="${PathFrom}/${FileToTake}"
scp -p user@host:"$FullFileNameToTake" "$DestinationPath"

사용 ftp하려면 위의 내용을 이 답변 과 병합 할 수 있습니다 .


친애하는 모든 여러분 께 어제 날짜를 잘 표시하고 표시 할 간단한 배치 파일을 만들도록 도와주십시오
SAKILANI Mohamed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.