Forum Discussion
OfficeDevPNP Add-PnPFile error folder already exists while looping through directories
- Dec 02, 2016
Made few corrections in your script to work. Below is the updated script.
$sourcePath = $PSScriptRoot; # 1.Don't forget to add "\" at end of $PSScriptRoot String value #$topSPOFolder = "SiteConfigurations/_PSI_Gestapeld"; $topSPOFolder = "Bieb1/_PSI_Gestapeld"; # install pnp powershell..? #Install-Module SharePointPnPPowerShellOnline; # connect to spo online; TODO: use appid and appsecret Connect-PnPOnline -Url $makeUrl -UseWebLogin; # foreach (updated or new?) file in git project $fileNames = Get-ChildItem -Path $sourcePath -Recurse -Include *.json,*.xml; $fileNames = Get-ChildItem -Path $sourcePath -Recurse ; foreach($aFileName in $fileNames) { if($aFileName.GetType().Name -ne "DirectoryInfo") { $filepath= [System.IO.Path]::GetDirectoryName($aFileName.FullName) $Urlpath= ($filepath.Replace($sourcePath, '')); $foldername=$Urlpath.Replace("/","\"); # 2."\","/" was changed $fn=$topSPOFolder+"\"+$foldername; # 3. "\" Added Add-PnPFile -Path $aFileName.FullName -Folder $fn; $fn=$null } }
Check the below script, which will loop through the directories and add the required folder and upload the files to SPO. While modifying "$folder", don't forget to have "\" at the end.
$cred=Get-Credential
Connect-PnPOnline -Url https://tenantname.sharepoint.com/sites/contosobeta -Credentials $cred
$Folder = "C:\Desktop\Userfolder2\"
$rootfolder=$folder.Replace("\","\\")
$ParentFolder ="Shared Documents\testing"
Function UploadFiles($path)
{
$files = Get-ChildItem $path
foreach ($file in $files)
{
if($file.GetType().Name -eq "DirectoryInfo")
{
$foldername=$file.Name
$parent=$file.Parent.FullName
$parent1=$parent+"\"
If($parent1 -eq $Folder)
{
Add-PnPFolder -Name $foldername -folder $ParentFolder
}
Else
{
$Urlpath1= ($parent -split "$rootfolder" )[1]
$foldernames1=$Urlpath1
if($foldernames1 -like "*\*")
{
$foldername1=$foldernames1.Replace("\","/")
}
Else
{
$foldername1=$foldernames1
}
$fnPath=$ParentFolder+"/"+$foldername1
Add-PnPFolder -Name $foldername -folder $fnPath
}
$Folderpath1=$file.FullName
UploadFiles $Folderpath1
}
Else
{
$filepath= [System.IO.Path]::GetDirectoryName($file.FullName)
$Urlpath= ($filepath -split "$rootfolder" )[1]
$foldernames=$Urlpath
if($foldernames -like "*\*")
{
$foldername=$foldernames.Replace("\","/")
}
Else
{
$foldername=$foldernames
}
$fn=$ParentFolder+"/"+$foldername
Add-PnPFile -Path $File.FullName -Folder $fn ;
$fn=$null
}
}
}
UploadFiles -path $Folder
Thank you NarasimaPerumal! You script works perfectly although I don't understand yet why mine doesn't. I combined both our scripts to make the below script. Add-PnpFile creates the required folders itself so it isnt necessary to use Add-PnPFolder separately.
$sourcePath = $PSScriptRoot;
#$topSPOFolder = "SiteConfigurations/_PSI_Gestapeld";
$topSPOFolder = "Bieb1/_PSI_Gestapeld";
# install pnp powershell..?
#Install-Module SharePointPnPPowerShellOnline;
# connect to spo online; TODO: use appid and appsecret
Connect-PnPOnline -Url $makeUrl -UseWebLogin;
# foreach (updated or new?) file in git project
$fileNames = Get-ChildItem -Path $sourcePath -Recurse -Include *.json,*.xml;
foreach($aFileName in $fileNames)
{
$filepath= [System.IO.Path]::GetDirectoryName($aFileName.FullName)
$Urlpath= ($filepath.Replace($sourcePath, ''));
$foldername=$Urlpath.Replace("\","/");
$fn=$topSPOFolder+$foldername;
Add-PnPFile -Path $aFileName.FullName -Folder $fn;
$fn=$null
}
- Dec 02, 2016
Made few corrections in your script to work. Below is the updated script.
$sourcePath = $PSScriptRoot; # 1.Don't forget to add "\" at end of $PSScriptRoot String value #$topSPOFolder = "SiteConfigurations/_PSI_Gestapeld"; $topSPOFolder = "Bieb1/_PSI_Gestapeld"; # install pnp powershell..? #Install-Module SharePointPnPPowerShellOnline; # connect to spo online; TODO: use appid and appsecret Connect-PnPOnline -Url $makeUrl -UseWebLogin; # foreach (updated or new?) file in git project $fileNames = Get-ChildItem -Path $sourcePath -Recurse -Include *.json,*.xml; $fileNames = Get-ChildItem -Path $sourcePath -Recurse ; foreach($aFileName in $fileNames) { if($aFileName.GetType().Name -ne "DirectoryInfo") { $filepath= [System.IO.Path]::GetDirectoryName($aFileName.FullName) $Urlpath= ($filepath.Replace($sourcePath, '')); $foldername=$Urlpath.Replace("/","\"); # 2."\","/" was changed $fn=$topSPOFolder+"\"+$foldername; # 3. "\" Added Add-PnPFile -Path $aFileName.FullName -Folder $fn; $fn=$null } }- Reinout DorreboomOct 10, 2018Copper Contributor
I had the same error.
For me it was that my library was called: "Gedeelde Documenten" (= dutch for "Shared Documents").So I did:
- Add-PnPFile -Path '.\test.docx' -Folder '\Gedeelde Documenten\1433\'
This gave me the error that the folder 1433 already exists.
I've change the syntax to:
- Add-PnPFile -Path '.\test.docx' -Folder '\Gedeelde%20Documenten\1433\'
and everything is working fine now!
Regards,
Reinout