디렉토리가 존재하지 않는 경우 작성
여러 개의 디렉토리가 없는 경우 생성하기 위해 PowerShell 스크립트를 작성합니다.
파일 시스템이 이와 유사합니다.
D:\
D:\TopDirec\SubDirec\Project1\Revision1\Reports\
D:\TopDirec\SubDirec\Project2\Revision1\
D:\TopDirec\SubDirec\Project3\Revision1\
- 각 프로젝트 폴더에는 여러 리비전이 있습니다.
- 각 리비전 폴더에는 보고서 폴더가 필요합니다.
- 일부 "revisions" 폴더에는 이미 Reports 폴더가 포함되어 있지만 대부분은 포함되어 있지 않습니다.
각 디렉토리에 대해 이러한 폴더를 작성하기 위해 매일 실행되는 스크립트를 작성해야 합니다.
폴더를 작성하는 스크립트를 작성할 수 있지만 폴더를 여러 개 만드는 것은 문제가 있습니다.
해 보다-Force
★★★★★★★★★★★★★★★★★★:
New-Item -ItemType Directory -Force -Path C:\Path\That\May\Or\May\Not\Exist
를 사용하여 먼저 확인할 수 있습니다.
자세한 내용은 New-Item MSDN 도움말 문서를 참조하십시오.
$path = "C:\temp\NewFolder"
If(!(test-path -PathType container $path))
{
New-Item -ItemType Directory -Path $path
}
Test-Path -PathType container
는 경로가 존재하며 디렉토리인지 여부를 확인합니다.그렇지 않으면 새 디렉토리가 생성됩니다.의해 오류가 합니다(New-Item을 수 ).-force
인수(위험한 경우)를 입력합니다.
[System.IO.Directory]::CreateDirectory('full path to directory')
이것은 내부적으로 디렉토리의 존재를 확인하고 디렉토리가 없는 경우 디렉토리를 작성합니다.한 줄에 원어민만.NET 메서드는 완벽하게 동작합니다.
용도:
$path = "C:\temp\"
If (!(test-path $path))
{
md $path
}
은 변수 이름인 변수를 .
$path
에 의해 "C가 할당됩니다.은 ''입니다.
If
Test-Path cmdlet에 의존하여 변수 여부를 확인합니다.$path
는 존재하지 않습니다.존재하지 않는 것은 다음 명령어를 사용하여!
★★★★★★ 。세 번째 줄:위의 문자열에 저장된 경로를 찾을 수 없는 경우 대괄호 사이의 코드가 실행됩니다.
md
입니다.New-Item -ItemType Directory -Path $path
주의: 테스트한 적이 없습니다.-Force
패스가 이미 존재하는 경우 바람직하지 않은 동작이 있는지 여부를 확인하려면 다음 파라미터를 사용합니다.
New-Item -ItemType Directory -Path $path
다음 코드 스니펫은 완전한 경로를 만드는 데 도움이 됩니다.
Function GenerateFolder($path) {
$global:foldPath = $null
foreach($foldername in $path.split("\")) {
$global:foldPath += ($foldername+"\")
if (!(Test-Path $global:foldPath)){
New-Item -ItemType Directory -Path $global:foldPath
# Write-Host "$global:foldPath Folder Created Successfully"
}
}
}
위의 함수는 함수에 전달한 경로를 분할하여 각 폴더의 존재 여부를 확인합니다.존재하지 않는 경우 대상/최종 폴더가 생성될 때까지 해당 폴더가 생성됩니다.
함수를 호출하려면 다음 문을 사용합니다.
GenerateFolder "H:\Desktop\Nithesh\SrcFolder"
나도 똑같은 문제가 있었어.다음과 같은 것을 사용할 수 있습니다.
$local = Get-Location;
$final_local = "C:\Processing";
if(!$local.Equals("C:\"))
{
cd "C:\";
if((Test-Path $final_local) -eq 0)
{
mkdir $final_local;
cd $final_local;
liga;
}
## If path already exists
## DB Connect
elseif ((Test-Path $final_local) -eq 1)
{
cd $final_local;
echo $final_local;
liga; (function created by you TODO something)
}
}
「 」를 -Force
플래그가 표시됩니다.PowerShell을 사용합니다.
원라이너:
Get-ChildItem D:\TopDirec\SubDirec\Project* | `
%{ Get-ChildItem $_.FullName -Filter Revision* } | `
%{ New-Item -ItemType Directory -Force -Path (Join-Path $_.FullName "Reports") }
BTW, 작업 스케줄에 대해서는 다음 링크를 확인하십시오.백그라운드 작업 스케줄링.
PowerShell을 사용하여 디렉토리를 작성하는 방법은 세 가지가 있습니다.
Method 1: PS C:\> New-Item -ItemType Directory -path "C:\livingston"
Method 2: PS C:\> [system.io.directory]::CreateDirectory("C:\livingston")
Method 3: PS C:\> md "C:\livingston"
고객님의 상황에서는 하루에 한 번씩 "Reports" 폴더를 만들고 거기에 "Reports" 폴더를 넣어야 할 것 같습니다.이 경우 다음 리비전 번호가 무엇인지 알면 됩니다.다음 리비전 번호인 Get-NextRevisionNumber를 얻는 함수를 작성합니다.또는 다음과 같은 작업을 수행할 수 있습니다.
foreach($Project in (Get-ChildItem "D:\TopDirec" -Directory)){
# Select all the Revision folders from the project folder.
$Revisions = Get-ChildItem "$($Project.Fullname)\Revision*" -Directory
# The next revision number is just going to be one more than the highest number.
# You need to cast the string in the first pipeline to an int so Sort-Object works.
# If you sort it descending the first number will be the biggest so you select that one.
# Once you have the highest revision number you just add one to it.
$NextRevision = ($Revisions.Name | Foreach-Object {[int]$_.Replace('Revision','')} | Sort-Object -Descending | Select-Object -First 1)+1
# Now in this we kill two birds with one stone.
# It will create the "Reports" folder but it also creates "Revision#" folder too.
New-Item -Path "$($Project.Fullname)\Revision$NextRevision\Reports" -Type Directory
# Move on to the next project folder.
# This untested example loop requires PowerShell version 3.0.
}
PowerShell 3.0 설치
여기 제게 효과가 있었던 간단한 것이 있습니다.경로가 존재하는지 확인하고 존재하지 않으면 루트 경로뿐만 아니라 모든 하위 디렉터리도 만듭니다.
$rptpath = "C:\temp\reports\exchange"
if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}
사용자가 PowerShell에 대한 기본 프로파일을 쉽게 생성하여 일부 설정을 재정의할 수 있도록 하고 싶었지만, 다음과 같은 한 줄(여러 문장을 PowerShell에 붙여넣고 한 번에 실행할 수 있음, 주요 목표)이 되었습니다.
cls; [string]$filePath = $profile; [string]$fileContents = '<our standard settings>'; if(!(Test-Path $filePath)){md -Force ([System.IO.Path]::GetDirectoryName($filePath)) | Out-Null; $fileContents | sc $filePath; Write-Host 'File created!'; } else { Write-Warning 'File already exists!' };
읽기 쉽도록 하기 위해 .ps1 파일로 대신 하는 방법은 다음과 같습니다.
cls; # Clear console to better notice the results
[string]$filePath = $profile; # Declared as string, to allow the use of texts without plings and still not fail.
[string]$fileContents = '<our standard settings>'; # Statements can now be written on individual lines, instead of semicolon separated.
if(!(Test-Path $filePath)) {
New-Item -Force ([System.IO.Path]::GetDirectoryName($filePath)) | Out-Null; # Ignore output of creating directory
$fileContents | Set-Content $filePath; # Creates a new file with the input
Write-Host 'File created!';
}
else {
Write-Warning "File already exists! To remove the file, run the command: Remove-Item $filePath";
};
$mWarningColor = 'Red'
<#
.SYNOPSIS
Creates a new directory.
.DESCRIPTION
Creates a new directory. If the directory already exists, the directory will
not be overwritten. Instead a warning message that the directory already
exists will be output.
.OUTPUT
If the directory already exists, the directory will not be overwritten.
Instead a warning message that the directory already exists will be output.
.EXAMPLE
Sal-New-Directory -DirectoryPath '.\output'
#>
function Sal-New-Directory {
param(
[parameter(mandatory=$true)]
[String]
$DirectoryPath
)
$ErrorActionPreference = "Stop"
try {
if (!(Test-Path -Path $DirectoryPath -PathType Container)) {
# Sal-New-Directory is not designed to take multiple
# directories. However, we use foreach to supress the native output
# and substitute with a custom message.
New-Item -Path $DirectoryPath -ItemType Container | `
foreach {'Created ' + $_.FullName}
} else {
Write-Host "$DirectoryPath already exists and" `
"so will not be (re)created." `
-ForegroundColor $mWarningColor
}
} finally {
$ErrorActionPreference = "Continue"
}
}
"sal"은 제 도서관의 임의 접두사일 뿐입니다.제거할 수도 있고 자신의 것으로 교체할 수도 있습니다.
또 다른 예(stackoverflow 구문의 하이라이팅이 무효가 되기 때문에 여기에 둡니다.
Sal-New-Directory -DirectoryPath ($mCARootDir + "private\")
예를 들어, 스크립트 폴더 내에 'Reports' 폴더를 만듭니다.
$ReportsDir = $PSScriptRoot + '\Reports'
$CreateReportsDir = [System.IO.Directory]::CreateDirectory($ReportsDir)
언급URL : https://stackoverflow.com/questions/16906170/create-directory-if-it-does-not-exist
'programing' 카테고리의 다른 글
SQL Server 쿼리: 테이블의 열 목록과 데이터 유형, NOT NULL 및 Primary KEY 제약 조건을 가져옵니다. (0) | 2023.04.08 |
---|---|
PowerShell에서 파일을 한 줄씩 스트림으로 처리하는 방법 (0) | 2023.04.08 |
PowerShell을 사용한 파일 이름 타임스탬프 (0) | 2023.04.08 |
SQL Server에서 단일 ALTER TABLE 문을 사용하여 여러 열을 드롭하려면 어떻게 해야 합니까? (0) | 2023.04.08 |
문자열의 UPDATE 및 REPLACE 부분 (0) | 2023.04.08 |