Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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
使用Powershell复制同一目录中的文件_Powershell - Fatal编程技术网

使用Powershell复制同一目录中的文件

使用Powershell复制同一目录中的文件,powershell,Powershell,我正在尝试编写powershell脚本,该脚本将在应用程序所在的同一路径上创建backupfolder,并需要在部署之前将文件夹和文件复制到backupfolder中。下面是用于执行的命令,但我收到错误 $Source = "C:\XYZ" $BackupFolder = New-Item -ItemType Directory -Force -Path $source_$(Get-Date) Copy-Item -Path $Source\* $BackupFolder -Force 错

我正在尝试编写powershell脚本,该脚本将在应用程序所在的同一路径上创建backupfolder,并需要在部署之前将文件夹和文件复制到backupfolder中。下面是用于执行的命令,但我收到错误

$Source = "C:\XYZ"
$BackupFolder = New-Item -ItemType Directory -Force -Path $source_$(Get-Date) 

Copy-Item -Path $Source\* $BackupFolder -Force
错误:无法将项目C:\XYZ\Backup_18-02-2017复制到自身

尝试:


这将消除您作为复制源复制到的文件夹。

变量可以包含下划线。以下代码工作并显示字符串“asdf”

您的
New Item
cmdlet调用本应失败,因为
$source\
不是变量,将返回null。这是PowerShell的默认行为。当我按原样运行代码时,我得到以下信息:

新项目:找不到驱动器。名为“02/18/2017 22”的驱动器不存在。第1行字符:1
+新项目-项目类型目录-强制-路径“$source_u$(Get Date)”-什么。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:ObjectNotFound:(2017年2月18日22:String)[新项目],DriveNotFoundException
+FullyQualifiedErrorId:DriveNotFound,Microsoft.PowerShell.Commands.NewItemCommand
所以我希望您的文件夹变量为null

有几种方法可以解决我确信的部分问题

$BackupFolder = New-Item -ItemType Directory -Force -Path "$source`_$(Get-Date)" 
$BackupFolder = New-Item -ItemType Directory -Force -Path "$($source)_$(Get-Date)" 
$BackupFolder = New-Item -ItemType Directory -Force -Path ("{0}_{1} -f "$source, Get-Date) 
您仍需尝试从副本中排除此文件夹,如


试试这样的

 $Source = "C:\XYZ"
 $Destination="{0}{1:yyyyMMdd}" -f $source, (Get-Date)
 New-Item -ItemType Directory -Force -Path $Destination

 Copy-Item -Path $Source\* $Destination -Recurse -Force

如果我理解正确的话。您需要将
“C:\XYZ”
备份到名为
“C:\XYZ\backup\u$DATE”
的同一目录中。实际上,您要做的是创建一个循环,一旦达到最大248个字符,循环就会中断。如果使用
-exclude
选项,则可以排除备份目录
“C:\XYZ\backup\u$DATE”

此函数将完成此操作,并提供错误处理

Function Get-CopyDirectory{
#####################
# Dynamic Variables #
#####################

$Date = Get-Date -format ddMM-yyyy
$Exclude="Backup*"

####################
# Static Variables #
####################
$AppPath = "F:\Test\"
$BackupPath = "$AppPath\BACKUP_$Date\"

if (Test-Path $BackupPath) {
Write-Host "Backup Exist" -f Cyan
}
else 
{
Copy-Item "$AppPath\*" $BackupPath -Exclude $Exclude -recurse -verbose
}
}
CLS
Get-CopyDirectory

我假设您已尝试使用管理员权限
$source\uu
是一个有效的标识符名称。使用
$($source)
$source`
William-我没听清你的问题,如果你问的是关于正在运行的具有管理员权限的Powershell,那么是的,正在运行脚本的帐户具有管理员权限很高兴它工作正常。如果你想接受这个答案,那就太酷了。
Copy-Item $Source\* $BackupFolder -Exclude $BackupFolder
 $Source = "C:\XYZ"
 $Destination="{0}{1:yyyyMMdd}" -f $source, (Get-Date)
 New-Item -ItemType Directory -Force -Path $Destination

 Copy-Item -Path $Source\* $Destination -Recurse -Force
Function Get-CopyDirectory{
#####################
# Dynamic Variables #
#####################

$Date = Get-Date -format ddMM-yyyy
$Exclude="Backup*"

####################
# Static Variables #
####################
$AppPath = "F:\Test\"
$BackupPath = "$AppPath\BACKUP_$Date\"

if (Test-Path $BackupPath) {
Write-Host "Backup Exist" -f Cyan
}
else 
{
Copy-Item "$AppPath\*" $BackupPath -Exclude $Exclude -recurse -verbose
}
}
CLS
Get-CopyDirectory