How to edit “Name” property in GCI output?
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length and the LastWriteTime.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | format-table -HideTableHeaders Name,Length,LastWriteTime
outputs:
available13.html.2019-03-26_081523.bak 93130 3/26/2019 8 : 10 : 05 AM
index.html.2019-03-26_081538.bak 93134 3/26/2019 8 : 15 : 23 AM
I would like to change Name
to this:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 93134 3/26/2019 8 : 15 : 23 AM
If I use:
$delim = "."
gci * -include *index*,*available13* -Name | `
foreach {
$nameArray = $_.Split($delim)
$newName = $nameArray[0] + "." + $nameArray[1]
Write-Output $newName
}
I get the edited Name with no date limit, no size and no last write time.
available13.html
available13.html
index.html
index.html
I've tried:
gci | gm | oh -paging
- two days of google search
- a regex (which I am not proficient at yet)
- parse
gci
outfile
It is close. Do I have to take another approach?
powershell text-editing
New contributor
add a comment |
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length and the LastWriteTime.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | format-table -HideTableHeaders Name,Length,LastWriteTime
outputs:
available13.html.2019-03-26_081523.bak 93130 3/26/2019 8 : 10 : 05 AM
index.html.2019-03-26_081538.bak 93134 3/26/2019 8 : 15 : 23 AM
I would like to change Name
to this:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 93134 3/26/2019 8 : 15 : 23 AM
If I use:
$delim = "."
gci * -include *index*,*available13* -Name | `
foreach {
$nameArray = $_.Split($delim)
$newName = $nameArray[0] + "." + $nameArray[1]
Write-Output $newName
}
I get the edited Name with no date limit, no size and no last write time.
available13.html
available13.html
index.html
index.html
I've tried:
gci | gm | oh -paging
- two days of google search
- a regex (which I am not proficient at yet)
- parse
gci
outfile
It is close. Do I have to take another approach?
powershell text-editing
New contributor
add a comment |
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length and the LastWriteTime.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | format-table -HideTableHeaders Name,Length,LastWriteTime
outputs:
available13.html.2019-03-26_081523.bak 93130 3/26/2019 8 : 10 : 05 AM
index.html.2019-03-26_081538.bak 93134 3/26/2019 8 : 15 : 23 AM
I would like to change Name
to this:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 93134 3/26/2019 8 : 15 : 23 AM
If I use:
$delim = "."
gci * -include *index*,*available13* -Name | `
foreach {
$nameArray = $_.Split($delim)
$newName = $nameArray[0] + "." + $nameArray[1]
Write-Output $newName
}
I get the edited Name with no date limit, no size and no last write time.
available13.html
available13.html
index.html
index.html
I've tried:
gci | gm | oh -paging
- two days of google search
- a regex (which I am not proficient at yet)
- parse
gci
outfile
It is close. Do I have to take another approach?
powershell text-editing
New contributor
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length and the LastWriteTime.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | format-table -HideTableHeaders Name,Length,LastWriteTime
outputs:
available13.html.2019-03-26_081523.bak 93130 3/26/2019 8 : 10 : 05 AM
index.html.2019-03-26_081538.bak 93134 3/26/2019 8 : 15 : 23 AM
I would like to change Name
to this:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 93134 3/26/2019 8 : 15 : 23 AM
If I use:
$delim = "."
gci * -include *index*,*available13* -Name | `
foreach {
$nameArray = $_.Split($delim)
$newName = $nameArray[0] + "." + $nameArray[1]
Write-Output $newName
}
I get the edited Name with no date limit, no size and no last write time.
available13.html
available13.html
index.html
index.html
I've tried:
gci | gm | oh -paging
- two days of google search
- a regex (which I am not proficient at yet)
- parse
gci
outfile
It is close. Do I have to take another approach?
powershell text-editing
powershell text-editing
New contributor
New contributor
edited 25 mins ago
JakeGould
32.2k1098141
32.2k1098141
New contributor
asked 10 hours ago
somebadhatsomebadhat
265
265
New contributor
New contributor
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
I'd use a RegEx with zero length lookbehind assertion to remove everything after html
from $_.Name
This can be done with a calculated property either in a Select-Object
or also in a Format-*
Get-ChildItem -File |
Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Name -HideTableHeaders
Sample output:
available13.html available13.html.2019-03-26_081523.bak
index.html index.html.2019-03-26_081538.bak
add a comment |
You can add a new property with Add-Member
like this
$time = (Get-Date).AddDays(-4)
$files = gci * -include index*,avail* | where {$_.LastWriteTime -gt $time}
foreach ($f in $files) {
$f | Add-Member noteproperty newName -Value `
$f.Name.Substring(0, $f.Name.Length - ".yyyy-mm-dd_iiiiii.bak".Length)
}
$files | Format-Table -HideTableHeaders newName,Length,LastWriteTime
Note that the above snippet assumes that your names always end with .yyyy-mm-dd_iiiiii.bak
. If they have some other format then you must include that information in the question, and you may need to use other string methods like replace, substring... to remove the unnecessary part
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
add a comment |
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# parse Notepad++ "backup on save" filenames.
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length (size) and the LastWriteTime.
# Can be used as a shortcut: powershell -noexit $time = (Get-Date).AddDays(-4); gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
# Start it in your directory of choice.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
Expected results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
Actual results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
See LotPings answer for the almost solution to the parse:
"I'd use a RegEx with zero length lookbehind assertion to remove
everything after html from $_.Name This can be done with a calculated
property either in a Select-Object or a Format-table". See the corrected solution below.
| Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
New contributor
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
somebadhat is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1419414%2fhow-to-edit-name-property-in-gci-output%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'd use a RegEx with zero length lookbehind assertion to remove everything after html
from $_.Name
This can be done with a calculated property either in a Select-Object
or also in a Format-*
Get-ChildItem -File |
Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Name -HideTableHeaders
Sample output:
available13.html available13.html.2019-03-26_081523.bak
index.html index.html.2019-03-26_081538.bak
add a comment |
I'd use a RegEx with zero length lookbehind assertion to remove everything after html
from $_.Name
This can be done with a calculated property either in a Select-Object
or also in a Format-*
Get-ChildItem -File |
Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Name -HideTableHeaders
Sample output:
available13.html available13.html.2019-03-26_081523.bak
index.html index.html.2019-03-26_081538.bak
add a comment |
I'd use a RegEx with zero length lookbehind assertion to remove everything after html
from $_.Name
This can be done with a calculated property either in a Select-Object
or also in a Format-*
Get-ChildItem -File |
Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Name -HideTableHeaders
Sample output:
available13.html available13.html.2019-03-26_081523.bak
index.html index.html.2019-03-26_081538.bak
I'd use a RegEx with zero length lookbehind assertion to remove everything after html
from $_.Name
This can be done with a calculated property either in a Select-Object
or also in a Format-*
Get-ChildItem -File |
Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Name -HideTableHeaders
Sample output:
available13.html available13.html.2019-03-26_081523.bak
index.html index.html.2019-03-26_081538.bak
answered 9 hours ago
LotPingsLotPings
5,2001823
5,2001823
add a comment |
add a comment |
You can add a new property with Add-Member
like this
$time = (Get-Date).AddDays(-4)
$files = gci * -include index*,avail* | where {$_.LastWriteTime -gt $time}
foreach ($f in $files) {
$f | Add-Member noteproperty newName -Value `
$f.Name.Substring(0, $f.Name.Length - ".yyyy-mm-dd_iiiiii.bak".Length)
}
$files | Format-Table -HideTableHeaders newName,Length,LastWriteTime
Note that the above snippet assumes that your names always end with .yyyy-mm-dd_iiiiii.bak
. If they have some other format then you must include that information in the question, and you may need to use other string methods like replace, substring... to remove the unnecessary part
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
add a comment |
You can add a new property with Add-Member
like this
$time = (Get-Date).AddDays(-4)
$files = gci * -include index*,avail* | where {$_.LastWriteTime -gt $time}
foreach ($f in $files) {
$f | Add-Member noteproperty newName -Value `
$f.Name.Substring(0, $f.Name.Length - ".yyyy-mm-dd_iiiiii.bak".Length)
}
$files | Format-Table -HideTableHeaders newName,Length,LastWriteTime
Note that the above snippet assumes that your names always end with .yyyy-mm-dd_iiiiii.bak
. If they have some other format then you must include that information in the question, and you may need to use other string methods like replace, substring... to remove the unnecessary part
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
add a comment |
You can add a new property with Add-Member
like this
$time = (Get-Date).AddDays(-4)
$files = gci * -include index*,avail* | where {$_.LastWriteTime -gt $time}
foreach ($f in $files) {
$f | Add-Member noteproperty newName -Value `
$f.Name.Substring(0, $f.Name.Length - ".yyyy-mm-dd_iiiiii.bak".Length)
}
$files | Format-Table -HideTableHeaders newName,Length,LastWriteTime
Note that the above snippet assumes that your names always end with .yyyy-mm-dd_iiiiii.bak
. If they have some other format then you must include that information in the question, and you may need to use other string methods like replace, substring... to remove the unnecessary part
You can add a new property with Add-Member
like this
$time = (Get-Date).AddDays(-4)
$files = gci * -include index*,avail* | where {$_.LastWriteTime -gt $time}
foreach ($f in $files) {
$f | Add-Member noteproperty newName -Value `
$f.Name.Substring(0, $f.Name.Length - ".yyyy-mm-dd_iiiiii.bak".Length)
}
$files | Format-Table -HideTableHeaders newName,Length,LastWriteTime
Note that the above snippet assumes that your names always end with .yyyy-mm-dd_iiiiii.bak
. If they have some other format then you must include that information in the question, and you may need to use other string methods like replace, substring... to remove the unnecessary part
edited 9 hours ago
answered 9 hours ago
phuclvphuclv
10.5k64295
10.5k64295
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
add a comment |
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
Although LotPings did not give me what I asked for, his almost solution was closest to what I ultimately needed, a solution that could be corrected into a one line shortcut. Thanks for taking the time. Yours worked right out of the box.
– somebadhat
4 hours ago
add a comment |
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# parse Notepad++ "backup on save" filenames.
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length (size) and the LastWriteTime.
# Can be used as a shortcut: powershell -noexit $time = (Get-Date).AddDays(-4); gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
# Start it in your directory of choice.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
Expected results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
Actual results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
See LotPings answer for the almost solution to the parse:
"I'd use a RegEx with zero length lookbehind assertion to remove
everything after html from $_.Name This can be done with a calculated
property either in a Select-Object or a Format-table". See the corrected solution below.
| Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
New contributor
add a comment |
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# parse Notepad++ "backup on save" filenames.
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length (size) and the LastWriteTime.
# Can be used as a shortcut: powershell -noexit $time = (Get-Date).AddDays(-4); gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
# Start it in your directory of choice.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
Expected results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
Actual results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
See LotPings answer for the almost solution to the parse:
"I'd use a RegEx with zero length lookbehind assertion to remove
everything after html from $_.Name This can be done with a calculated
property either in a Select-Object or a Format-table". See the corrected solution below.
| Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
New contributor
add a comment |
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# parse Notepad++ "backup on save" filenames.
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length (size) and the LastWriteTime.
# Can be used as a shortcut: powershell -noexit $time = (Get-Date).AddDays(-4); gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
# Start it in your directory of choice.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
Expected results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
Actual results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
See LotPings answer for the almost solution to the parse:
"I'd use a RegEx with zero length lookbehind assertion to remove
everything after html from $_.Name This can be done with a calculated
property either in a Select-Object or a Format-table". See the corrected solution below.
| Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
New contributor
# Microsoft Windows [Version 10.0.17134.648]
# powershell 5.1.17134.48
# parse Notepad++ "backup on save" filenames.
# dir directory. Include index*,avail* where the last write time is less than
# 4 days. Display a parsed Name. Display the Length (size) and the LastWriteTime.
# Can be used as a shortcut: powershell -noexit $time = (Get-Date).AddDays(-4); gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
# Start it in your directory of choice.
$time = (Get-Date).AddDays(-4)
gci * -include index*,avail* | where {$_.LastWriteTime -gt $time} | Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
Expected results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
Actual results:
available13.html 93130 3/26/2019 8 : 10 : 05 AM
index.html 39386 3/26/2019 8 : 10 : 05 AM
See LotPings answer for the almost solution to the parse:
"I'd use a RegEx with zero length lookbehind assertion to remove
everything after html from $_.Name This can be done with a calculated
property either in a Select-Object or a Format-table". See the corrected solution below.
| Format-Table @{n='foo';e={$_.Name -replace '(?<=^.*.html).*$'}},Length,LastWriteTime -HideTableHeaders
New contributor
edited 4 hours ago
New contributor
answered 4 hours ago
somebadhatsomebadhat
265
265
New contributor
New contributor
add a comment |
add a comment |
somebadhat is a new contributor. Be nice, and check out our Code of Conduct.
somebadhat is a new contributor. Be nice, and check out our Code of Conduct.
somebadhat is a new contributor. Be nice, and check out our Code of Conduct.
somebadhat is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1419414%2fhow-to-edit-name-property-in-gci-output%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown