Replacing 2nd occurrence of “-” with “_” using Powershell
I've been using Powershell to simplify repetitive tasks in creating directories, renaming and moving files. I'm working with Video and PDF files where the required syntax of the filename is very specific. So far I've been able to correct all of the common errors I run across, but this one has me stumped.
The correct syntax for my files would include:
01A-50_02A-50-CIPP-PRE.MP4
01AA-50_02AA-50-CIPP-PNSL.PDF
W01AA-48_02AA-48-CIPP-PST-CMP.MPG
I'm receiving a large amount of files that look like this:
01A-50-02A-50-CIPP-PRE.MP4
01AA-50-02AA-50-CIPP-PNSL.PDF
W01AA-48-02AA-48-CIPP-PST-CMP.MPG
I need to replace the second dash with an underscore while keeping the other dashes unaffected. I can otherwise do this in bulk with some help from excel, but I was hoping to have a short code that could find and correct this error in syntax without having to export a list to excel, use text to columns, and then concatenate the alphanumeric portions back together. I also don't want to correct all these filenames manually.
From what I've researched, it's not possible to target a specific occurrence of a character to replace. the closest I've come to thinking I'd found a solution involved REGEX and identifying and replacing a pattern. I haven't been able to do anything constructive with that.
The way I would use this code would be by opening the folder that contains the missnamed files, opening a Powershell window there, copying the code from a txt file on my desktop, and pasting it into Powershell.
Any help on this would be greatly appreciated.
regex powershell replace renaming
add a comment |
I've been using Powershell to simplify repetitive tasks in creating directories, renaming and moving files. I'm working with Video and PDF files where the required syntax of the filename is very specific. So far I've been able to correct all of the common errors I run across, but this one has me stumped.
The correct syntax for my files would include:
01A-50_02A-50-CIPP-PRE.MP4
01AA-50_02AA-50-CIPP-PNSL.PDF
W01AA-48_02AA-48-CIPP-PST-CMP.MPG
I'm receiving a large amount of files that look like this:
01A-50-02A-50-CIPP-PRE.MP4
01AA-50-02AA-50-CIPP-PNSL.PDF
W01AA-48-02AA-48-CIPP-PST-CMP.MPG
I need to replace the second dash with an underscore while keeping the other dashes unaffected. I can otherwise do this in bulk with some help from excel, but I was hoping to have a short code that could find and correct this error in syntax without having to export a list to excel, use text to columns, and then concatenate the alphanumeric portions back together. I also don't want to correct all these filenames manually.
From what I've researched, it's not possible to target a specific occurrence of a character to replace. the closest I've come to thinking I'd found a solution involved REGEX and identifying and replacing a pattern. I haven't been able to do anything constructive with that.
The way I would use this code would be by opening the folder that contains the missnamed files, opening a Powershell window there, copying the code from a txt file on my desktop, and pasting it into Powershell.
Any help on this would be greatly appreciated.
regex powershell replace renaming
add a comment |
I've been using Powershell to simplify repetitive tasks in creating directories, renaming and moving files. I'm working with Video and PDF files where the required syntax of the filename is very specific. So far I've been able to correct all of the common errors I run across, but this one has me stumped.
The correct syntax for my files would include:
01A-50_02A-50-CIPP-PRE.MP4
01AA-50_02AA-50-CIPP-PNSL.PDF
W01AA-48_02AA-48-CIPP-PST-CMP.MPG
I'm receiving a large amount of files that look like this:
01A-50-02A-50-CIPP-PRE.MP4
01AA-50-02AA-50-CIPP-PNSL.PDF
W01AA-48-02AA-48-CIPP-PST-CMP.MPG
I need to replace the second dash with an underscore while keeping the other dashes unaffected. I can otherwise do this in bulk with some help from excel, but I was hoping to have a short code that could find and correct this error in syntax without having to export a list to excel, use text to columns, and then concatenate the alphanumeric portions back together. I also don't want to correct all these filenames manually.
From what I've researched, it's not possible to target a specific occurrence of a character to replace. the closest I've come to thinking I'd found a solution involved REGEX and identifying and replacing a pattern. I haven't been able to do anything constructive with that.
The way I would use this code would be by opening the folder that contains the missnamed files, opening a Powershell window there, copying the code from a txt file on my desktop, and pasting it into Powershell.
Any help on this would be greatly appreciated.
regex powershell replace renaming
I've been using Powershell to simplify repetitive tasks in creating directories, renaming and moving files. I'm working with Video and PDF files where the required syntax of the filename is very specific. So far I've been able to correct all of the common errors I run across, but this one has me stumped.
The correct syntax for my files would include:
01A-50_02A-50-CIPP-PRE.MP4
01AA-50_02AA-50-CIPP-PNSL.PDF
W01AA-48_02AA-48-CIPP-PST-CMP.MPG
I'm receiving a large amount of files that look like this:
01A-50-02A-50-CIPP-PRE.MP4
01AA-50-02AA-50-CIPP-PNSL.PDF
W01AA-48-02AA-48-CIPP-PST-CMP.MPG
I need to replace the second dash with an underscore while keeping the other dashes unaffected. I can otherwise do this in bulk with some help from excel, but I was hoping to have a short code that could find and correct this error in syntax without having to export a list to excel, use text to columns, and then concatenate the alphanumeric portions back together. I also don't want to correct all these filenames manually.
From what I've researched, it's not possible to target a specific occurrence of a character to replace. the closest I've come to thinking I'd found a solution involved REGEX and identifying and replacing a pattern. I haven't been able to do anything constructive with that.
The way I would use this code would be by opening the folder that contains the missnamed files, opening a Powershell window there, copying the code from a txt file on my desktop, and pasting it into Powershell.
Any help on this would be greatly appreciated.
regex powershell replace renaming
regex powershell replace renaming
edited Nov 16 '18 at 15:11
mklement0
135k21252289
135k21252289
asked Nov 15 '18 at 22:31
J_BRASJ_BRAS
234
234
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
Use the -replace
operator with a regular expression:
Get-ChildItem |
Rename-Item -NewName $_.Name -replace '^([^_-]+-[^_-]+)-', '$1_' -WhatIf
-WhatIf
previews the renaming operation; remove it to perform actual renaming.
Regex
'^([^_-]+-[^_-]+)-'
captures the first two-
separated tokens at the start (^
) of the filename, using a capture group ((...)
) to capture the tokens excluding the 2nd-
.[^_-]+
captures any nonempty run of characters that are neither-
nor_
._
is also ruled out in order to prevent false positives with filenames that already are correct; for those, not ruling out_
would match the first 3 tokens and insert an additional_
there.
Replacement operand
$1_
then uses the value of the 1st (and only) capture group ($1
) followed by a literal_
to replace what the regex matched, which effectively replaces the 2nd-
with a_
.If a given file name doesn't match the regex (if it already is correct), the name is returned as-is, which is a quiet no-op in the context of
Rename-Item
.
add a comment |
Looking at your examples, it appears that the second -
always appears between numbers. Something like $Variable -replace 'REGEX','_'
Using the below regex will match those.
(?<=[0-9])(.)(?=[0-9])
()
creates a group to match, it is a capturing group.
?<=
is a positive lookbehind, it matches a group before the main expression without including it in the results
[0-9]
is the character set, matching anything between 0 and 9.
.
matches any character except line breaks
?=
is a positive lookahead, it matches a group after the main expression without including it in the results
I recommend using Regexr to test and learn Regex.
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
add a comment |
You could split the string on the first two occurrences of -
, then concatenate them by -
and _
:
$name = '01A-50-02A-50-CIPP-PRE.MP4'
$first,$second,$rest = $name -split '-',3
$newName = "$first-$second_$rest"
1
for some reason,'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]
– Lee_Dailey
Nov 16 '18 at 1:10
add a comment |
What about this RegEx: (?<=(^|n)[^-]*-[^-]*)-
?
Or as a full command (using answers to Replace Part of File Name Powershell):
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=^[^-_]+-[^-_]+)-','_'
Edit: incorporated suggestions from @mklement0
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
add a comment |
Thank you Solomon Ucko!
That was almost exactly what I was looking for.
Get-ChildItem | Rename-Item -NewName $.name -replace '(?<=(^
It worked great on all of the examples I could throw at it, EXCEPT...
if I ran the code on a mixed group of misnamed and properly named files, it would add another underscore where it didn't belong...
"E21U-50A_E21U_50-CIPP-PST-CMP"
instead of
"E21U-50A_E21U-50-CIPP-PST-CMP"
the fix for that was easy enough.
All I did was replace all _
s with -
s, first.
Get-ChildItem | Rename-Item -NewName $_.name -replace '_','-'
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=(^
Thanks to everyone who had other ideas. Admittedly I have not tried them because this solution was the first one I tried and it did the trick.
I am, however, going to tinker with the other solutions after I get my work done.
Thanks again.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
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
);
);
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%2fstackoverflow.com%2fquestions%2f53328793%2freplacing-2nd-occurrence-of-with-using-powershell%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use the -replace
operator with a regular expression:
Get-ChildItem |
Rename-Item -NewName $_.Name -replace '^([^_-]+-[^_-]+)-', '$1_' -WhatIf
-WhatIf
previews the renaming operation; remove it to perform actual renaming.
Regex
'^([^_-]+-[^_-]+)-'
captures the first two-
separated tokens at the start (^
) of the filename, using a capture group ((...)
) to capture the tokens excluding the 2nd-
.[^_-]+
captures any nonempty run of characters that are neither-
nor_
._
is also ruled out in order to prevent false positives with filenames that already are correct; for those, not ruling out_
would match the first 3 tokens and insert an additional_
there.
Replacement operand
$1_
then uses the value of the 1st (and only) capture group ($1
) followed by a literal_
to replace what the regex matched, which effectively replaces the 2nd-
with a_
.If a given file name doesn't match the regex (if it already is correct), the name is returned as-is, which is a quiet no-op in the context of
Rename-Item
.
add a comment |
Use the -replace
operator with a regular expression:
Get-ChildItem |
Rename-Item -NewName $_.Name -replace '^([^_-]+-[^_-]+)-', '$1_' -WhatIf
-WhatIf
previews the renaming operation; remove it to perform actual renaming.
Regex
'^([^_-]+-[^_-]+)-'
captures the first two-
separated tokens at the start (^
) of the filename, using a capture group ((...)
) to capture the tokens excluding the 2nd-
.[^_-]+
captures any nonempty run of characters that are neither-
nor_
._
is also ruled out in order to prevent false positives with filenames that already are correct; for those, not ruling out_
would match the first 3 tokens and insert an additional_
there.
Replacement operand
$1_
then uses the value of the 1st (and only) capture group ($1
) followed by a literal_
to replace what the regex matched, which effectively replaces the 2nd-
with a_
.If a given file name doesn't match the regex (if it already is correct), the name is returned as-is, which is a quiet no-op in the context of
Rename-Item
.
add a comment |
Use the -replace
operator with a regular expression:
Get-ChildItem |
Rename-Item -NewName $_.Name -replace '^([^_-]+-[^_-]+)-', '$1_' -WhatIf
-WhatIf
previews the renaming operation; remove it to perform actual renaming.
Regex
'^([^_-]+-[^_-]+)-'
captures the first two-
separated tokens at the start (^
) of the filename, using a capture group ((...)
) to capture the tokens excluding the 2nd-
.[^_-]+
captures any nonempty run of characters that are neither-
nor_
._
is also ruled out in order to prevent false positives with filenames that already are correct; for those, not ruling out_
would match the first 3 tokens and insert an additional_
there.
Replacement operand
$1_
then uses the value of the 1st (and only) capture group ($1
) followed by a literal_
to replace what the regex matched, which effectively replaces the 2nd-
with a_
.If a given file name doesn't match the regex (if it already is correct), the name is returned as-is, which is a quiet no-op in the context of
Rename-Item
.
Use the -replace
operator with a regular expression:
Get-ChildItem |
Rename-Item -NewName $_.Name -replace '^([^_-]+-[^_-]+)-', '$1_' -WhatIf
-WhatIf
previews the renaming operation; remove it to perform actual renaming.
Regex
'^([^_-]+-[^_-]+)-'
captures the first two-
separated tokens at the start (^
) of the filename, using a capture group ((...)
) to capture the tokens excluding the 2nd-
.[^_-]+
captures any nonempty run of characters that are neither-
nor_
._
is also ruled out in order to prevent false positives with filenames that already are correct; for those, not ruling out_
would match the first 3 tokens and insert an additional_
there.
Replacement operand
$1_
then uses the value of the 1st (and only) capture group ($1
) followed by a literal_
to replace what the regex matched, which effectively replaces the 2nd-
with a_
.If a given file name doesn't match the regex (if it already is correct), the name is returned as-is, which is a quiet no-op in the context of
Rename-Item
.
edited Nov 16 '18 at 19:21
answered Nov 15 '18 at 23:00
mklement0mklement0
135k21252289
135k21252289
add a comment |
add a comment |
Looking at your examples, it appears that the second -
always appears between numbers. Something like $Variable -replace 'REGEX','_'
Using the below regex will match those.
(?<=[0-9])(.)(?=[0-9])
()
creates a group to match, it is a capturing group.
?<=
is a positive lookbehind, it matches a group before the main expression without including it in the results
[0-9]
is the character set, matching anything between 0 and 9.
.
matches any character except line breaks
?=
is a positive lookahead, it matches a group after the main expression without including it in the results
I recommend using Regexr to test and learn Regex.
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
add a comment |
Looking at your examples, it appears that the second -
always appears between numbers. Something like $Variable -replace 'REGEX','_'
Using the below regex will match those.
(?<=[0-9])(.)(?=[0-9])
()
creates a group to match, it is a capturing group.
?<=
is a positive lookbehind, it matches a group before the main expression without including it in the results
[0-9]
is the character set, matching anything between 0 and 9.
.
matches any character except line breaks
?=
is a positive lookahead, it matches a group after the main expression without including it in the results
I recommend using Regexr to test and learn Regex.
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
add a comment |
Looking at your examples, it appears that the second -
always appears between numbers. Something like $Variable -replace 'REGEX','_'
Using the below regex will match those.
(?<=[0-9])(.)(?=[0-9])
()
creates a group to match, it is a capturing group.
?<=
is a positive lookbehind, it matches a group before the main expression without including it in the results
[0-9]
is the character set, matching anything between 0 and 9.
.
matches any character except line breaks
?=
is a positive lookahead, it matches a group after the main expression without including it in the results
I recommend using Regexr to test and learn Regex.
Looking at your examples, it appears that the second -
always appears between numbers. Something like $Variable -replace 'REGEX','_'
Using the below regex will match those.
(?<=[0-9])(.)(?=[0-9])
()
creates a group to match, it is a capturing group.
?<=
is a positive lookbehind, it matches a group before the main expression without including it in the results
[0-9]
is the character set, matching anything between 0 and 9.
.
matches any character except line breaks
?=
is a positive lookahead, it matches a group after the main expression without including it in the results
I recommend using Regexr to test and learn Regex.
answered Nov 15 '18 at 22:41
DrewDrew
1,417418
1,417418
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
add a comment |
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
unfortunately, not always between numbers. sometimes like this E21U-50A_E21U-50-CIPP-PST-CMP
– J_BRAS
Nov 16 '18 at 15:05
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
thanks for the breakdown. very helpful
– J_BRAS
Nov 16 '18 at 15:16
add a comment |
You could split the string on the first two occurrences of -
, then concatenate them by -
and _
:
$name = '01A-50-02A-50-CIPP-PRE.MP4'
$first,$second,$rest = $name -split '-',3
$newName = "$first-$second_$rest"
1
for some reason,'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]
– Lee_Dailey
Nov 16 '18 at 1:10
add a comment |
You could split the string on the first two occurrences of -
, then concatenate them by -
and _
:
$name = '01A-50-02A-50-CIPP-PRE.MP4'
$first,$second,$rest = $name -split '-',3
$newName = "$first-$second_$rest"
1
for some reason,'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]
– Lee_Dailey
Nov 16 '18 at 1:10
add a comment |
You could split the string on the first two occurrences of -
, then concatenate them by -
and _
:
$name = '01A-50-02A-50-CIPP-PRE.MP4'
$first,$second,$rest = $name -split '-',3
$newName = "$first-$second_$rest"
You could split the string on the first two occurrences of -
, then concatenate them by -
and _
:
$name = '01A-50-02A-50-CIPP-PRE.MP4'
$first,$second,$rest = $name -split '-',3
$newName = "$first-$second_$rest"
answered Nov 15 '18 at 22:59
Mathias R. JessenMathias R. Jessen
58.4k463109
58.4k463109
1
for some reason,'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]
– Lee_Dailey
Nov 16 '18 at 1:10
add a comment |
1
for some reason,'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]
– Lee_Dailey
Nov 16 '18 at 1:10
1
1
for some reason,
'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]– Lee_Dailey
Nov 16 '18 at 1:10
for some reason,
'0-1_2' -f $first, $second, $rest
seems nicer to me. [grin]– Lee_Dailey
Nov 16 '18 at 1:10
add a comment |
What about this RegEx: (?<=(^|n)[^-]*-[^-]*)-
?
Or as a full command (using answers to Replace Part of File Name Powershell):
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=^[^-_]+-[^-_]+)-','_'
Edit: incorporated suggestions from @mklement0
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
add a comment |
What about this RegEx: (?<=(^|n)[^-]*-[^-]*)-
?
Or as a full command (using answers to Replace Part of File Name Powershell):
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=^[^-_]+-[^-_]+)-','_'
Edit: incorporated suggestions from @mklement0
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
add a comment |
What about this RegEx: (?<=(^|n)[^-]*-[^-]*)-
?
Or as a full command (using answers to Replace Part of File Name Powershell):
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=^[^-_]+-[^-_]+)-','_'
Edit: incorporated suggestions from @mklement0
What about this RegEx: (?<=(^|n)[^-]*-[^-]*)-
?
Or as a full command (using answers to Replace Part of File Name Powershell):
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=^[^-_]+-[^-_]+)-','_'
Edit: incorporated suggestions from @mklement0
edited Nov 16 '18 at 18:21
answered Nov 15 '18 at 22:51
Solomon UckoSolomon Ucko
7612822
7612822
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
add a comment |
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
Nailed it! This was what I was trying to do.
– J_BRAS
Nov 16 '18 at 15:11
add a comment |
Thank you Solomon Ucko!
That was almost exactly what I was looking for.
Get-ChildItem | Rename-Item -NewName $.name -replace '(?<=(^
It worked great on all of the examples I could throw at it, EXCEPT...
if I ran the code on a mixed group of misnamed and properly named files, it would add another underscore where it didn't belong...
"E21U-50A_E21U_50-CIPP-PST-CMP"
instead of
"E21U-50A_E21U-50-CIPP-PST-CMP"
the fix for that was easy enough.
All I did was replace all _
s with -
s, first.
Get-ChildItem | Rename-Item -NewName $_.name -replace '_','-'
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=(^
Thanks to everyone who had other ideas. Admittedly I have not tried them because this solution was the first one I tried and it did the trick.
I am, however, going to tinker with the other solutions after I get my work done.
Thanks again.
add a comment |
Thank you Solomon Ucko!
That was almost exactly what I was looking for.
Get-ChildItem | Rename-Item -NewName $.name -replace '(?<=(^
It worked great on all of the examples I could throw at it, EXCEPT...
if I ran the code on a mixed group of misnamed and properly named files, it would add another underscore where it didn't belong...
"E21U-50A_E21U_50-CIPP-PST-CMP"
instead of
"E21U-50A_E21U-50-CIPP-PST-CMP"
the fix for that was easy enough.
All I did was replace all _
s with -
s, first.
Get-ChildItem | Rename-Item -NewName $_.name -replace '_','-'
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=(^
Thanks to everyone who had other ideas. Admittedly I have not tried them because this solution was the first one I tried and it did the trick.
I am, however, going to tinker with the other solutions after I get my work done.
Thanks again.
add a comment |
Thank you Solomon Ucko!
That was almost exactly what I was looking for.
Get-ChildItem | Rename-Item -NewName $.name -replace '(?<=(^
It worked great on all of the examples I could throw at it, EXCEPT...
if I ran the code on a mixed group of misnamed and properly named files, it would add another underscore where it didn't belong...
"E21U-50A_E21U_50-CIPP-PST-CMP"
instead of
"E21U-50A_E21U-50-CIPP-PST-CMP"
the fix for that was easy enough.
All I did was replace all _
s with -
s, first.
Get-ChildItem | Rename-Item -NewName $_.name -replace '_','-'
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=(^
Thanks to everyone who had other ideas. Admittedly I have not tried them because this solution was the first one I tried and it did the trick.
I am, however, going to tinker with the other solutions after I get my work done.
Thanks again.
Thank you Solomon Ucko!
That was almost exactly what I was looking for.
Get-ChildItem | Rename-Item -NewName $.name -replace '(?<=(^
It worked great on all of the examples I could throw at it, EXCEPT...
if I ran the code on a mixed group of misnamed and properly named files, it would add another underscore where it didn't belong...
"E21U-50A_E21U_50-CIPP-PST-CMP"
instead of
"E21U-50A_E21U-50-CIPP-PST-CMP"
the fix for that was easy enough.
All I did was replace all _
s with -
s, first.
Get-ChildItem | Rename-Item -NewName $_.name -replace '_','-'
Get-ChildItem | Rename-Item -NewName $_.name -replace '(?<=(^
Thanks to everyone who had other ideas. Admittedly I have not tried them because this solution was the first one I tried and it did the trick.
I am, however, going to tinker with the other solutions after I get my work done.
Thanks again.
edited Nov 16 '18 at 21:18
mklement0
135k21252289
135k21252289
answered Nov 16 '18 at 14:53
J_BRASJ_BRAS
234
234
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- 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%2fstackoverflow.com%2fquestions%2f53328793%2freplacing-2nd-occurrence-of-with-using-powershell%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