윈도우 탐색기에서는 여러 폴더에 있는 특정 파일들을 복사하는 기능이 없죠.

저의 경우에는 업무상 여러 폴더에 있는 특정파일들을 다른 경로에 동일한 구조로 복사해야 하는 경우가 빈번합니다.


매번 탐색기로 작업을 하자니 너무 번거로와서 파워쉘로 만들어 봤습니다.

복사할 파일이 다를 경우 스크립트를 수정해야 하긴 하지만 하나하나 복사하는 것보다는 좀 더 수월합니다. 


자 스크립트 나갑니다.

# filename : copy_files.ps1
# author : simmanix
# date : 2016-05-18 16:40
 
$ROOT_DIR= $PSScriptRoot
echo $ROOT_DIR
$DEST_PATH="DestPath"
 
$Src_Nation="USA"
 
$Files = New-Object System.Collections.ArrayList
$Files += "TTF\TTFInfo.xml"
$Files += "Config\NationInfo.xml"
 
function fCopyFile ()
{
	$D_PATH=$args[0]
	$File=$args[1]
 
	If ( $args.Count -lt 2 )
	{
		return
	}
 
	echo "cur path = $D_PATH"
	echo "cur file = $File"
	echo "cp $ROOT_DIR\$DEST_PATH\$Src_Nation\$File $ROOT_DIR\$M_TYPE\$D_PATH\$File"
 
	& cp $ROOT_DIR\$DEST_PATH\$Src_Nation\$File $ROOT_DIR\$M_TYPE\$D_PATH\$File
}
 
cd .\$DEST_PATH
 
$ARR_NATION = Get-ChildItem -Directory -Name
 
for( $i = 0 ; $i -lt $ARR_NATION.Count ; $i++ )
{
	$NATION = $ARR_NATION[$i]
 
	If ( $Src_Nation -eq $NATION )
	{
		continue;
	}
 
	for( $j = 0 ; $j -lt $Files.Count ; $j++ )
	{
		fCopyFile $NATION $Files[$j]
	}
 
	cd $ROOT_DIR
}


설명


$Files += "여기에 복사하고자 하는 파일들을 추가합니다.txt"

$ARR_NATION -> 복사하고자 하는 대상 폴더입니다. 위에서는 특정 폴더내의 모든 폴더에 넣는 코드입니다. 여러분들은 $Files 처럼 만들고 사용하는 것이 좋겠죠?


나머지는 충분히 분석가능하리라 생각합니다.



'Programming > PowerShell' 카테고리의 다른 글

VisualStudio 의 빌드이벤트에 Powershell 사용하기  (0) 2016.05.24
PowerShell 설정  (0) 2016.05.24
  • VisualStudio 의 빌드이벤트에 Powershell 사용하기
    • Powershell 관리자 모드로 실행 후 아래와 같이 입력 후 실행한다.
         
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    • 빌드 전 이벤트에 아래와 같이 입력한다. 파라미터를 넣는게 핵심이다.( *사이띄개 주의 할 것 )
      (환경변수 PATH 에 PowerShell 경로를 추가하자.)
         
powershell "$(SolutionDir)build_event_before.ps1" "$(ProjectName) " "$(NATION)"

  • buil_event_before.ps1 샘플
    • project 별 Predefine.h 에 CommonClient.vsprops 에 정의된 $(NATION) 에 맞는 국가를 #include 하도록 변경하는 Script 이다.
         
# filename : build_event_before.ps1
# author : simmanix
# date : 2016-04-07 21:42
# Visual Studio 에서 빌드시 프로젝트 별로 설정된 Predefine_$NATION.h 가 include 되도록 수정한다.
 
$invocation = (Get-Variable MyInvocation).Value 
$scriptPath = Split-Path $invocation.MyCommand.Path 
$scriptName = $invocation.MyCommand.Name
 
echo "--------------- start $scriptName ---------------"
 
if( $args.Count -lt 2 )
{
 
    echo "usage : $scripName param1 param2"
    echo "--------------- failed $scriptName ---------------"
    exit 1
}
 
$ProjName = $args[0]
$Nation = $args[1]
 
echo "ProjectName : $ProjName"
echo "Nation : $Nation"
 
$PredefineFileName = $PSScriptRoot + "\src\" + $ProjName + "\Predefine.h"
$OldNation = 0
 
$Lines = Get-Content $PredefineFileName | % {
    if( $_ -match "#include `"Predefine_" )
    {
        $sp = $_.split("_");
        $OldNation = $sp[1].replace( ".h`"", "" );
        $bSame = $OldNation -eq $Nation;
        $_ = $sp[0] + "_" + $Nation + ".h`"";
    }
    $_;
}
 
if( $bSame )
{
    echo "Not changed because same nation";
}
else
{
    Set-Content -path $PredefineFileName -Value $Lines
    echo "Changed $OldNation to $Nation"
}
 
echo "--------------- succeed $scriptName ---------------"


'Programming > PowerShell' 카테고리의 다른 글

특정파일들을 여러 폴더에 복사하는 PowerShell Script  (0) 2016.05.24
PowerShell 설정  (0) 2016.05.24


+ Recent posts