hithesh
hithesh

Reputation: 439

Bash script to copy files in PowerShell

Is it possible to copy files using bash script (.sh) on powershell?

Tried using cp and copy, but got command not found error. However, if use cp or copy in the powershell command line, it does work.

I tried

Copy-Item -path "$file_path" -Destination "C:\destination\"

where $file_path is a variable with the source file This resulted in syntax errors-

Unexpected EOF while looking for matching ' " '
syntax error: unexpected end of file

The exact same copy-item command works when executed in powershell command line.

Upvotes: 0

Views: 1546

Answers (1)

postanote
postanote

Reputation: 16076

You don't need double quotes for simple string text or a simple variable.

Copy-Item -path $file_path -Destination 'C:\destination'

Double quotes are for variable expansion use cases where it is needed and in some formatting use cases. For example, combining a variable with something else, so say a file path.

Get-ChildItem -Path 'D:\Temp' | 
ForEach {
    $PSItem
    $PSitem.BaseName
    'Processing ' + $PSItem.FullName
    "Processing $($PSItem.FullName)"
} | 
Select -First 4 | 
Format-Table -AutoSize
# Results
<#
    Directory: D:\Temp


Mode          LastWriteTime Length Name        
----          ------------- ------ ----        
d-----  06-May-20     20:30        AddressFiles
AddressFiles
Processing D:\Temp\AddressFiles
Processing D:\Temp\AddressFiles
#>

So, if I took your sample and refactor a bit so you can see what I mean:

$File_path = 'D:\Temp'
Get-ChildItem -Path $File_path -File | 
Select -First 4 | 
ForEach {
    Copy-Item -Path $PSItem.FullName -Destination 'D:\Temp\est' -WhatIf
} 
# Results
<#
What if: Performing the operation "Copy File" on target "Item: D:\Temp\(MSINFO32) command-line tool switches.pdf Destination: D:\Temp\est\(MSINFO32) comm
and-line tool switches.pdf".
What if: Performing the operation "Copy File" on target "Item: D:\Temp\23694d1213305764-revision-number-in-excel-book1.xls Destination: D:\Temp\est\23694
d1213305764-revision-number-in-excel-book1.xls".
What if: Performing the operation "Copy File" on target "Item: D:\Temp\5 Free Software You'll Wish You Knew Earlier! 2019 - YouTube.url Destination: D:\T
emp\est\5 Free Software You'll Wish You Knew Earlier! 2019 - YouTube.url".
What if: Performing the operation "Copy File" on target "Item: D:\Temp\abc.bat Destination: D:\Temp\est\abc.bat".
#>

Yet again, as [David C. Rankin], unless your environment is properly configured, you can only run PowerShell commands in the PowerShell consolehost, ISE or VSCode.

You can run external executables in PowerShell, but you must call it properly, especially if you are using the PowerShell ISE.

PowerShell: Running Executables

Table of Contents

  1. Direct - Using the environment path or local folder
  2. Invoke-Expression (IEX)
  3. Invoke-Command (ICM)
  4. Invoke-Item (II)
  5. The Call Operator &
  6. cmd /c - Using the old cmd shell
  7. Start-Process (start/saps)
  8. [Diagnostics.Process] Start()
  9. WMI Win32_Process Create() Method
  10. Stop-Parsing Symbol --%

Upvotes: 1

Related Questions