【发布时间】:2016-05-27 03:17:47
【问题描述】:
我有一个目录,我想递归地复制到另一个位置进行处理。似乎没有创建第一个目录。执行复制的程序部分如下:
# Read the source files to convert.
$lAllFiles = Get-ChildItem $lSrc -Exclude $lExcludedFiles
# Remove excluded directories
foreach ( $lExclusion in $lAllExcludedDirectories ) {
# If we have a wildcard use the -notlike operator to filter the list.
# Otherwise use an -ne operator.
if ( ($lExclusion -like '*' ) -or ($lExclusion -like '?' ) ) {
$lAllFiles = [array]$lAllFiles -notlike $lExclusion
} else {
$lAllFiles = [array]$lAllFiles -ne $lExclusion
}
}
# Start the log.
Start-Transcript -Path "$lJobLog"
# Copy the data to be converted to the conversion root.
ForEach ( $lFile in $lAllFiles ) {
Copy-Item $lFile $lCnv -Recurse -Force -ErrorAction SilentlyContinue -ErrorVariable +JobErrors -Verbose
}
.
.
.
当我比较源目录和目标目录时,看起来好像第一个子目录没有在目标中创建,第一个子目录的内容被写入目标。
举个例子:
The Source:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 1/6/2013 9:30 AM AP-LEDGER
d---- 3/12/2014 9:28 AM AP.DETAIL
d---- 8/20/2014 9:33 PM AR-LEDGER
d---- 9/3/2011 9:58 AM lost+found
-a--- 5/13/2016 9:21 PM 32768 AP-BATCH-CTRL
-a--- 5/13/2016 8:39 PM 291293184 AP-LEDGER-XREF
-a--- 9/28/2015 3:14 PM 8425472 AP.JDE
-a--- 5/13/2016 8:39 PM 150700032 AP.LINK
-a--- 5/2/2016 3:30 PM 52224 AP.QUEUES
-a--- 5/13/2016 8:17 PM 743018496 AP.SUSP
-a--- 4/30/2016 9:11 PM 51222528 ARROLLARC
-a--- 4/30/2016 9:11 PM 102404096 ARROLLFWD
-a--- 5/14/2016 3:29 AM 1016950784 A_Pa
-a--- 5/14/2016 12:37 AM 238280704 A_Ra
-a--- 5/14/2016 3:16 AM 61423616 GL-CROSS
-a--- 5/14/2016 3:16 AM 175235072 GL-INDEX
-a--- 5/14/2016 3:16 AM 21512192 G_La
-a--- 5/14/2016 3:16 AM 224661504 X_AP.SUSP
-a--- 5/14/2016 3:29 AM 150089728 X_A_Pa
-a--- 5/14/2016 12:37 AM 63578112 X_A_Ra
目的地:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 5/26/2016 10:53 PM AP.DETAIL
d---- 5/26/2016 10:53 PM AR-LEDGER
-a--- 5/13/2016 8:38 PM 1073737728 dat001
-a--- 5/13/2016 8:39 PM 682541056 dat002
-a--- 5/13/2016 8:39 PM 1004023808 idx001
-a--- 5/13/2016 8:37 PM 41234432 over001
注意目录中的文件应位于文件夹 AP-LEDGER 中。 怎么回事?
-Recurse -Force 不创建目录吗?
【问题讨论】:
-
$lFile包含什么?$lAllFiles呢? -
$lAllFiles 包含 X:\acctng_ssd\AP-LEDGER X:\acctng_ssd\AP.DETAIL X:\acctng_ssd\AR-LEDGER X:\acctng_ssd\AP-BATCH-CTRL X:\acctng_ssd\ AP-LEDGER-XREF X:\acctng_ssd\AP.JDE X:\acctng_ssd\AP.LINK X:\acctng_ssd\AP.QUEUES X:\acctng_ssd\AP.SUSP X:\acctng_ssd\ARROLLARC X:\acctng_ssd\ARROLLFWD X :\acctng_ssd\A_Pa X:\acctng_ssd\A_Ra X:\acctng_ssd\GL-CROSS X:\acctng_ssd\GL-INDEX X:\acctng_ssd\G_La
-
$lAllFiles 包含以下内容:
X:\acctng_ssd\AP-LEDGER X:\acctng_ssd\AP.DETAIL X:\acctng_ssd\AR-LEDGER X:\acctng_ssd\AP-BATCH-CTRL X:\acctng_ssd\AP-LEDGER-XREF X:\acctng_ssd\AP.JDE X:\acctng_ssd\AP.LINK X:\acctng_ssd\AP.QUEUES X:\acctng_ssd\AP.SUSP X:\acctng_ssd\ARROLLARC X:\acctng_ssd\ARROLLFWD X:\acctng_ssd\A_Pa X:\acctng_ssd\A_Ra X:\acctng_ssd\GL-CROSS X:\acctng_ssd\GL-INDEX X:\acctng_ssd\G_La$lFile 包含 to X:\acctng_ssd\AP-LEDGER 的对象 -
第一个副本之前目标目录是否存在?我敢打赌它不会。因此,第一个副本将
AP-LEDGERas 复制到目标位置,其余副本复制到新创建的文件夹中。尝试先确保目的地存在,看看是否能解决问题。
标签: powershell recursion copy-item