我想用PowerShell做一個簡單的查找和替換。從本質上講,我曾經在一個目錄中有一些支持文件,其名稱與「主」文件相同。除這些支持文件之外的所有文件都不再需要。 「主」文件具有對其他文件路徑的文本引用。我想要做的是在「主」文件中修改此路徑以刪除已刪除的目錄。使用PowerShell替換字符串中包含的字符串
例如,假設我有一個文件C:\Temp\this+that.txt
我曾經有C:\Temp\this+that\this+that.dat
現在已被轉移到C:\Temp\this+that.dat
C:\Temp\this+that.txt
有這樣一行:
/temp/this+that/this+that.dat
我想這條線成爲:
/temp/this+that.dat
我有很多這些批處理文件正在移動的文件。使用下面的powershell命令,所有文件名都不包含加號+
符號,所有工作都正常。對於這些文件,下面的調用不起作用。
powershell -Command "(gc '!CURRENT_FILE!') -replace '/!BASE_NAME!/', '/' | Set-Content '!CURRENT_FILE!'"
對於上面的例子中,CURRENT_FILE
是C:\Temp\this+that.txt
和BASE_NAME
將this+that
誰能幫我這是爲什麼不工作了包含加+
標誌的文件名?
這裏的問題是,您正在將'!BASE_NAME!'當作正則表達式對待。我不知道我的方式PowerShell,但[這個答案看起來可能會幫助](https://stackoverflow.com/questions/23651862/powershell-how-to-escape-all-regex-characters-from-a -string#23651909)。基本上你需要使用特殊的正則表達式來轉義所有字符 - 意思是在將它插入表達式之前。 –
@ma_il完全正確。 「+」字符是RegEx中的一個特殊字符,因此您需要將其轉義。 ''(gc'!CURRENT_FILE!')--replace [regex] :: escape('/!BASE_NAME!/'),'/'| Set-Content'!CURRENT_FILE!'「' – TheMadTechnician