我正在使用 Powershell 并尝试返回目录的子项(该子项恰好是子目录),然后使用 cmdletRename-Item
将子目录名称重命名为其他名称。
我觉得下面的代码应该有效:
Get-ChildItem "C:\Users\Admin\Desktop\mydirectory\subdirectory" | Rename-Item -NewName {$_.Name -replace 'test'}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
Rename-Item : Source and destination path must be different.
我在这里缺少什么?提前致谢!
powershell get-childitem rename-item-cmdlet powershell-cmdlet
我正在尝试将字符串数组通过管道传输到 write-host 并显式用于$_
写入这些字符串:
'foo', 'bar', 'baz' | write-host $_
Run Code Online (Sandbox Code Playgroud)
但是,它失败了:
输入对象无法绑定到命令的任何参数,因为该命令不采用管道输入,或者输入及其属性与采用管道输入的任何参数都不匹配。
这个错误消息对我来说毫无意义,因为我完全能够写
'foo', 'bar', 'baz' | write-host
Run Code Online (Sandbox Code Playgroud)
我本以为两条管道是等效的。显然,他们不是。那么,有什么区别呢?
我试图通过在文件中添加基于递增计数器的前缀来重命名文件,例如:
$directory = 'C:\Temp'
[int] $count=71;
gci $directory | sort -Property LastWriteTime | `
rename-item -newname {"{0}_{1}" -f $count++, $_.Name} -whatif
Run Code Online (Sandbox Code Playgroud)
然而,所有的文件处理是71_
和$count
在$count++
从不增量和文件名前缀相同?为什么?
我目前有一个 Powershell 脚本,它正在迭代捆绑的 MT103 文件。目前,它检查标志并决定是否转发文件。问题是,有时,MT177(不需要的)信息与所需的文件捆绑在一起,并且文件被转发到放置点。
如何修改我的 Powershell 脚本以根据分隔符“{-”检测并分割此文件。
例如:多次付款由换行符分隔。例如:
{-
MT103 payment 1
-}
{-
MT103 payment 2
-}
Run Code Online (Sandbox Code Playgroud)
我们的愿望是将这个文件分割成多个文件,然后单独处理它们。
生成的文件应包含
{-
MT103 payment 1
-}
Run Code Online (Sandbox Code Playgroud)
{-
MT103 payment 2
-}
Run Code Online (Sandbox Code Playgroud) 由于使用 -Recurse 标志时,Get-ChildItem 的 -Exclude 参数不会对子文件夹进行过滤,因此请参阅使用 get-childitem-exclude-parameter-in-powershell 中的其他无法排除目录的内容
但 -Exclude 参数可用于过滤掉根级别的文件夹
我写了自己的递归函数:
function Get-ChildItem-Recurse() {
[cmdletbinding()]
Param(
[parameter(ValueFromPipelineByPropertyName = $true)]
[alias('FullName')]
[string[]] $Path,
[string] $Filter,
[string[]] $Exclude,
[string[]] $Include,
[switch] $Recurse = $true,
[switch] $File = $false
)
Process {
ForEach ( $P in $Path ) {
Get-ChildItem -Path $P -Filter $Filter -Include $Include -Exclude $Exclude | ForEach-Object {
if ( -not ( $File -and $_.PSIsContainer ) ) {
$_
}
if ( $Recurse -and $_.PSIsContainer ) {
$_ …
Run Code Online (Sandbox Code Playgroud) 我有一系列文件,它们都是从基本系统导出的(补救措施)。默认情况下,它们在文件名之前有 32 个字符的 ID 相关信息。我想把这些字符去掉。然而,这样做也会导致重复,所以我需要一种方法来重命名它们而不创建重复。
例子:
CWL000000004901-z2AF 工作日志01-RFP 2012 01 获奖推荐.pdf
CWL000000004716-z2AF 工作日志01-Computrace 2009 年 11 月.pdf
CWL000000006007-z2AF 工作日志01-Computrace 2009 年 11 月.pdf
(删除前面的字符后,后 2 个将相同)
$i = 1
Get-ChildItem -Path "C:\temp\Remedy Contract Attachments\Output\CTR_WorkLog_test1_a" |
ForEach-Object -Process {
$NewName = $_.BaseName.Substring(32)
$NewName2 = $NewName + "_" + $i + $_.Extension
Rename-Item $_.FullName -NewName $NewName2
$i++
}
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码。
似乎只要总字符数小于 64 就可以,
Computrace_Nov_2009_156.pdf
Computrace_Nov_2009_157.pdf
但随后它似乎会重复处理其余部分,就像这样
ietor_127_502.pdf
该文件夹中只有 394 个文件。
我从 PowerShell 学到的大部分内容都是从这里学到的,但我绝对被难住了。为什么它要多次处理文件?它会抛出一堆错误,表示它无法删除超过字符串中的字符数,因此显然它在最终崩溃之前仍在处理它们。但为什么?
或者有更好的方法来做到这一点吗?
我确信这是一件小事,我会因为整个下午都在与这些代码战斗而感到愚蠢。
谢谢!
我想停止名为“ALG”的服务,所以我使用:"alg" | stop-service
有用。
Get-help stop-service -parameter name
说:
Pipeline input:true(ByPropertyName, ByValue)
而“alg”是“ByPropertyValue”,对吗?
我想停止名为记事本的进程,因此我使用:"notepad" | stop-process
并且收到错误。
Get-help stop-process -parameter name
说:Pipeline input true(ByPropertyName)
“记事本”是“ByPropertyName”?
为什么会出现这个错误?
我有多个以这种格式命名的文件:
Fat1920OVXPlacebo_S20_R1_001.fastq
Kidney1235SHAM_S65_R1_001.fastq
Kidney1911OVXPlacebo_S94_R2_001.fastq
Liver1289OVXEstrogen_S24_R2_001.fastq
Run Code Online (Sandbox Code Playgroud)
我需要在他们的名字中插入字符串“L1000_”,以便他们阅读
Fat1920OVXPlacebo_S20_L1000_R1_001.fastq
Kidney1235SHAM_S65_L1000_R1_001.fastq
Kidney1911OVXPlacebo_S94_L1000_R2_001.fastq
Liver1289OVXEstrogen_S24_L1000_R2_001.fastq
Run Code Online (Sandbox Code Playgroud)
我很抱歉,但我绝对没有在 powershell 中编码的经验。我能找到的最接近的方法是重命名整个文件的脚本:
Set objFso = CreateObject(“Scripting.FileSystemObject”)
Set Folder = objFSO.GetFolder(“ENTER\PATH\HERE”)
For Each File In Folder.Files
sNewFile = File.Name
sNewFile = Replace(sNewFile,”ORIGINAL”,”REPLACEMENT”)
if (sNewFile<>File.Name) then
File.Move(File.ParentFolder+”\”+sNewFile)
end if
Next
Run Code Online (Sandbox Code Playgroud)
但是,我只需要在文件标题的特定位置插入一个字符串。我有 257 个文件,不想一个一个地进行。有没有人知道如何在 Windows 中运行它?
我有一个文件夹,其中包含按时间戳命名的媒体文件,如下所示yyyyMMdd_HHmmss_*.*
。我需要将它们重命名为yyyy-MM-dd HH-mm-ss *.*
例如,我需要将文件重命名20181019_210353_BURST2.jpg
为2018-10-19 21-03-53 BURST2.jpg
有一个我的丑陋方法
PS E:> gci | Rename-Item -NewName { $_.Name.Substring(0,4) + '-' + $_.Name.Substring(4,2) + '-' + $_.Name.Substring(6,2) + ' ' + $_.Name.Substring(9,2) + '-' + $_.Name.Substring(11,2) + '-' + $_.Name.Substring(13,2) + $_.Name.Substring(15) }
Run Code Online (Sandbox Code Playgroud)
实现我的目的的正确命令是什么?
powershell ×9
pipeline ×2
copy-item ×1
datetime ×1
parameters ×1
pipe ×1
scope ×1
scriptblock ×1
split ×1
text-parsing ×1
windows ×1